7.7 KiB
mcp-integration Specification
Purpose
TBD - created by archiving change add-mcp-server. Update Purpose after archive.
Requirements
Requirement: MCP Server Implementation
The system SHALL provide an MCP (Model Context Protocol) server that exposes member management functionality as standardized AI tools.
Scenario: MCP server starts successfully
- GIVEN the GraphQL API is running at http://127.0.0.1:8000/graphql
- WHEN the MCP server is started with
node dist/mcp_server.js(after building) - THEN the server SHALL initialize and listen for MCP protocol requests via stdio transport
Scenario: MCP server connects to GraphQL API
- GIVEN the MCP server is running
- WHEN an MCP tool is invoked
- THEN the server SHALL send GraphQL queries to the configured API endpoint via HTTP
Requirement: List Members Tool
The MCP server SHALL provide a list_members tool that retrieves all members from the GraphQL API.
Scenario: List all members successfully
- GIVEN the GraphQL API has 3 members in the database
- WHEN the
list_memberstool is invoked - THEN the tool SHALL return a JSON array containing all 3 members with their complete data
Scenario: List members when database is empty
- GIVEN the GraphQL API has no members
- WHEN the
list_memberstool is invoked - THEN the tool SHALL return an empty JSON array
Requirement: Get Member Tool
The MCP server SHALL provide a get_member tool that retrieves a single member by ID.
Scenario: Get member by valid ID
- GIVEN a member exists with ID 1
- WHEN the
get_membertool is invoked with id=1 - THEN the tool SHALL return the member's complete data as JSON
Scenario: Get member with nonexistent ID
- GIVEN no member exists with ID 999
- WHEN the
get_membertool is invoked with id=999 - THEN the tool SHALL return an error indicating the member was not found
Requirement: Create Member Tool
The MCP server SHALL provide a create_member tool that creates new members via the GraphQL API.
Scenario: Create member with minimal data
- GIVEN only a first name "Alice" is provided
- WHEN the
create_membertool is invoked - THEN the tool SHALL create a new member with firstName="Alice" and return the created member with generated ID
Scenario: Create member with complete data
- GIVEN complete member data including name, address, email, and phone
- WHEN the
create_membertool is invoked - THEN the tool SHALL create a member with all fields populated and return the created member
Scenario: Create member with invalid email
- GIVEN an invalid email format "not-an-email"
- WHEN the
create_membertool is invoked with this email - THEN the tool SHALL return a validation error from the GraphQL API
Requirement: Update Member Tool
The MCP server SHALL provide an update_member tool that updates existing member information.
Scenario: Update member successfully
- GIVEN a member exists with ID 1
- WHEN the
update_membertool is invoked with id=1 and email="updated@example.com" - THEN the tool SHALL update the member's email and return the updated member data
Scenario: Update member with invalid ID
- GIVEN no member exists with ID 999
- WHEN the
update_membertool is invoked with id=999 - THEN the tool SHALL return an error indicating the member was not found
Requirement: Configuration
The MCP server SHALL support configuration via environment variables.
Scenario: Custom API URL configuration
- GIVEN environment variable CLUBBER_API_URL is set to "http://localhost:3000/graphql"
- WHEN the MCP server starts
- THEN the server SHALL use "http://localhost:3000/graphql" as the GraphQL endpoint
Scenario: Default API URL
- GIVEN no CLUBBER_API_URL environment variable is set
- WHEN the MCP server starts
- THEN the server SHALL default to "http://127.0.0.1:8000/graphql"
Requirement: Error Handling
The MCP server SHALL handle errors gracefully and return meaningful error messages.
Scenario: GraphQL API unavailable
- GIVEN the GraphQL API is not running
- WHEN any MCP tool is invoked
- THEN the tool SHALL return an error indicating the API is unreachable
Scenario: GraphQL validation error
- GIVEN the GraphQL API returns a validation error
- WHEN an MCP tool is invoked with invalid data
- THEN the tool SHALL return the validation error message to the client
Requirement: Get GraphQL Schema Tool
The MCP server SHALL provide a get_graphql_schema tool that returns the complete GraphQL schema definition via introspection.
Scenario: Get GraphQL schema successfully
- GIVEN the GraphQL API is running and accessible
- WHEN the
get_graphql_schematool is invoked - THEN the tool SHALL execute an introspection query
- AND return the complete schema including types, queries, mutations, and field descriptions
- AND format the result as human-readable text with structured schema information
Scenario: Schema retrieval when API is unavailable
- GIVEN the GraphQL API is not running
- WHEN the
get_graphql_schematool is invoked - THEN the tool SHALL return an error indicating the API is unreachable
- AND provide guidance on starting the API
Requirement: Execute GraphQL Query Tool
The MCP server SHALL provide an execute_graphql_query tool that executes arbitrary GraphQL queries and mutations.
Scenario: Execute valid GraphQL query
- GIVEN a valid GraphQL query is provided
- WHEN the
execute_graphql_querytool is invoked with the query - THEN the tool SHALL send the query to the GraphQL API
- AND return the query results as formatted JSON
- AND include all requested fields in the response
Scenario: Execute GraphQL query with variables
- GIVEN a GraphQL query with variable placeholders
- WHEN the
execute_graphql_querytool is invoked with query and variables - THEN the tool SHALL substitute variables correctly
- AND execute the query with the provided variable values
- AND return the results
Scenario: Execute GraphQL mutation
- GIVEN a valid GraphQL mutation query
- WHEN the
execute_graphql_querytool is invoked with the mutation - THEN the tool SHALL execute the mutation
- AND return the mutation results including any modified data
- AND persist changes to the database
Scenario: Execute invalid GraphQL query
- GIVEN a GraphQL query with syntax errors
- WHEN the
execute_graphql_querytool is invoked - THEN the tool SHALL return a GraphQL validation error
- AND include details about the syntax error
- AND not modify any data
Scenario: Execute query with GraphQL validation errors
- GIVEN a GraphQL query requesting non-existent fields
- WHEN the
execute_graphql_querytool is invoked - THEN the tool SHALL return a GraphQL validation error
- AND indicate which fields are invalid
- AND not execute the query
Requirement: Tool Input Schema for GraphQL Execution
The execute_graphql_query tool SHALL accept a query string and optional variables object.
Scenario: Tool accepts query without variables
- GIVEN a simple GraphQL query without variables
- WHEN the tool is invoked with only the query parameter
- THEN the query SHALL execute successfully
- AND no variables are passed to the GraphQL API
Scenario: Tool accepts query with variables
- GIVEN a GraphQL query using variables
- WHEN the tool is invoked with query and variables parameters
- THEN both parameters SHALL be validated
- AND variables SHALL be passed as a JSON object to the GraphQL API
- AND the query executes with variable substitution