UNPKG

mcp-quickbase

Version:

Work with Quickbase via Model Context Protocol

178 lines (136 loc) 8.06 kB
# Plan: Relationship Management ## Overview This document outlines the phased execution plan for implementing relationship management tools in the MCP Quickbase server. The plan follows a safety-first approach: read-only operations first, then write operations with explicit safety measures for destructive actions. ## Phases ### Phase 1: Foundation - Read Operations and Domain Setup **Objective:** Establish the relationships domain and implement the read-only `get_relationships` tool, enabling agents to explore table structures safely. **Deliverables:** - `src/tools/relationships/` directory structure - `src/tools/relationships/index.ts` with registration function - `src/tools/relationships/get_relationships.ts` tool implementation - `src/__tests__/tools/relationships.test.ts` with tests for get_relationships - Update to `src/tools/index.ts` to register relationship tools **Agent Assignments:** - implement-feature: Create directory structure and index.ts registration pattern - implement-feature: Implement GetRelationshipsTool with full type definitions - implement-feature: Update main tools/index.ts to include relationships **Acceptance Criteria:** - [ ] `get_relationships` tool is registered and callable - [ ] Returns correct relationship structure with foreignKeyField, lookupFields, summaryFields - [ ] **API response structure validated against TypeScript interfaces** - Confirm actual Quickbase API responses match documented structure before proceeding to Phase 2 - [ ] Pagination (skip parameter) works correctly - Verify if API supports limit parameter and adjust if needed - [ ] Tool description clearly explains what information is returned - [ ] Unit tests cover success case, empty results, pagination, and API errors ### Phase 2: Write Operations - Create and Update **Objective:** Implement non-destructive write operations that allow creating and enhancing relationships. **Deliverables:** - `src/tools/relationships/create_relationship.ts` tool implementation - `src/tools/relationships/update_relationship.ts` tool implementation - Extended tests in `src/__tests__/tools/relationships.test.ts` **Agent Assignments:** - implement-feature: Implement CreateRelationshipTool with lookup/summary field support - implement-feature: Implement UpdateRelationshipTool (additive operations only) **Acceptance Criteria:** - [ ] `create_relationship` tool creates relationships with optional lookup/summary fields - [ ] Tool description emphasizes this is a SAFE operation - [ ] **JSON Schema conditional validation enforced** - summary_accumulation_type is required when summary_field_id is provided - [ ] `update_relationship` tool adds fields to existing relationships - [ ] Update tool description clearly states "ADDITIVE ONLY" - [ ] Unit tests cover: basic creation, creation with lookups, creation with summary, validation errors - [ ] Unit tests cover: update adding lookups, update adding summary, relationship not found - [ ] Unit tests verify conditional validation: missing accumulation_type with summary_field_id fails validation ### Phase 3: Destructive Operations with Safety Measures **Objective:** Implement the delete operation with comprehensive safety warnings and agent guidance. **Deliverables:** - `src/tools/relationships/delete_relationship.ts` tool implementation - Complete test coverage for delete scenarios - Final documentation updates **Agent Assignments:** - implement-feature: Implement DeleteRelationshipTool with safety-focused description - implement-feature: Ensure all tests pass and coverage threshold met - implement-feature: Update exports and verify tool registration **Acceptance Criteria:** - [ ] `delete_relationship` tool description starts with "WARNING: DESTRUCTIVE OPERATION" - [ ] Description explicitly lists what will be deleted (lookup fields, summary fields) - [ ] Description explicitly states data is permanently lost - [ ] Description recommends using `get_relationships` first to review impact - [ ] Description recommends confirming with user before proceeding - [ ] Unit tests cover: successful deletion, relationship not found, API errors - [ ] All four tools are registered and functional - [ ] Test coverage meets or exceeds 40% threshold (lines/functions/statements) and 20% branches per jest.config.js ### Phase 4: Integration and Verification **Objective:** Verify complete integration, ensure all tests pass, and validate agent safety measures. **Deliverables:** - Passing test suite with coverage >= 40% (lines/functions/statements) and >= 20% branches per jest.config.js - All linting checks pass - Verified tool descriptions for agent safety **Agent Assignments:** - verify-task: Run full test suite and validate coverage - verify-task: Verify all tools are properly registered - verify-task: Review tool descriptions for clarity and safety warnings - commit-task: Commit all changes with descriptive message **Acceptance Criteria:** - [ ] `npm test` passes all tests - [ ] `npm run lint` shows no errors - [ ] All four relationship tools appear in tool registry - [ ] Delete tool description contains required safety warnings - [ ] Integration test validates end-to-end flow (if applicable) ## Dependencies ### Cross-Phase Dependencies ``` Phase 1 (Foundation) | +---> Phase 2 (Create/Update) [depends on domain setup] | +---> Phase 3 (Delete) [depends on domain setup, benefits from Phase 2 patterns] | +---> Phase 4 (Verification) [depends on all implementations] ``` ### External Dependencies | Dependency | Type | Status | |------------|------|--------| | `src/tools/base.ts` (BaseTool) | Existing | Available | | `src/client/quickbase.ts` (QuickbaseClient) | Existing | Available | | `src/tools/registry.ts` (toolRegistry) | Existing | Available | | Quickbase Relationships API | External | Available | ## Risk Mitigation | Risk | Probability | Impact | Mitigation | |------|-------------|--------|------------| | API schema differs from documentation | Medium | Medium | Start with get_relationships to validate response structure; adjust types as needed | | Agent uses delete without understanding consequences | Medium | High | Comprehensive warning in tool description; recommend user confirmation | | Test coverage falls below threshold | Low | Medium | Write tests concurrently with implementation; prioritize critical paths | | Validation complexity for summary fields | Medium | Low | Clear error messages when accumulation_type missing; follow existing field patterns | ## Success Metrics - [ ] All four relationship tools implemented and registered - [ ] `get_relationships` returns accurate relationship data - [ ] `create_relationship` successfully creates relationships with lookup/summary fields - [ ] `update_relationship` adds fields without deleting existing ones - [ ] `delete_relationship` has prominent destructive operation warnings - [ ] Test coverage >= 40% lines/functions/statements, >= 20% branches (per jest.config.js) - [ ] No lint errors - [ ] Tool descriptions help agents understand when to use each tool - [ ] Destructive operations clearly marked and explain consequences ## Implementation Notes ### Tool Naming Convention Follow existing snake_case pattern: - `get_relationships` (not `getRelationships`) - `create_relationship` (not `createRelationship`) - `update_relationship` (not `updateRelationship`) - `delete_relationship` (not `deleteRelationship`) ### Parameter Naming Convention Follow existing patterns: - `table_id` (not `tableId`) - `relationship_id` (not `relationshipId`) - `parent_table_id` (not `parentTableId`) - `lookup_field_ids` (not `lookupFieldIds`) ### Error Message Format Include context for debugging: ```typescript throw new Error(`Failed to get relationships for table ${tableId}: ${response.error?.message || 'Unknown error'}`); ``` ### Logging Pattern Use existing logger: ```typescript const logger = createLogger('GetRelationshipsTool'); logger.info('Getting relationships for table', { tableId }); ```