Code Reader MCP Server
Provides tools to interact with GitHub repositories, including listing services, fetching commits, comparing branches, analyzing API files, and retrieving pull requests for configured services.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Code Reader MCP ServerWhat are the new API endpoints in bliklan-campaign-management's latest commit?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Code Reader - MCP Server
An MCP (Model Context Protocol) server that connects to your GitHub repositories, detects API changes, and provides context for Cursor to automatically generate test cases.
Features
π Detect API Changes: Compare branches/commits to find new or modified API endpoints
π Multi-Service Support: Configure multiple services with their automation repos
π GitHub Integration: Fetch file contents, commits, PRs directly from GitHub
π Test Templates: Get starter templates for REST, GraphQL, and gRPC APIs
π€ Cursor Integration: Provides tools that Cursor can use to understand your API changes
Related MCP server: GitHub Enterprise MCP Server
Configured Services
This MCP server is configured for the following Bliklan services:
Service | Repository |
bliklan-campaign-management | gdncomm/bliklan-campaign-management |
bliklan-tracker-aggregator | gdncomm/bliklan-tracker-aggregator |
bliklan-compute-engine | gdncomm/bliklan-compute-engine |
bliklan-credit | gdncomm/bliklan-credit |
bliklan-ads-engine | gdncomm/bliklan-ads-engine |
Prerequisites
Node.js 18+ (we recommend using nvm)
npm (comes with Node.js)
GitHub Fine-Grained Personal Access Token (required for gdncomm org)
Cursor IDE
Check Your Node.js Version
node --version
# Should be v18.x.x or higher (v20.x or v21.x recommended)If you're using an older version, install a newer one via nvm:
nvm install 21
nvm use 21
nvm alias default 21Quick Start
Step 1: Clone the Repository
git clone <repository-url>
cd api-test-mcp-serverStep 2: Install Dependencies
npm installStep 3: Build the Server
npm run buildThis creates the dist/index.js file that Cursor will run.
Step 4: Create a GitHub Fine-Grained Token
β οΈ Important: The gdncomm organization requires a fine-grained personal access token (classic tokens won't work).
Click "Generate new token"
Configure:
Token name:
api-test-mcp-serverExpiration: Choose appropriate duration
Resource owner: Select
gdncommorganizationRepository access: Select "Only select repositories" β choose the repos you need
Permissions (Repository permissions):
Contents: Read-only
Metadata: Read-only
Pull requests: Read-only
Commit statuses: Read-only
Click Generate token
Copy the token (starts with
github_pat_)
Step 5: Configure Cursor MCP
Create or edit ~/.cursor/mcp.json:
{
"mcpServers": {
"api-test-server": {
"command": "/path/to/your/node",
"args": ["/path/to/api-test-mcp-server/dist/index.js"],
"env": {
"GITHUB_TOKEN": "github_pat_your_token_here",
"DEFAULT_BASE_BRANCH": "master",
"SERVICES_CONFIG": "[{\"name\":\"bliklan-campaign-management\",\"repoOwner\":\"gdncomm\",\"repoName\":\"bliklan-campaign-management\",\"automationRepoPath\":\"/Users/yourname/automation-repos/bliklan-campaign-management\",\"apiPatterns\":[\"**/controllers/**\",\"**/routes/**\",\"**/api/**\",\"**/*Controller*\",\"**/*Router*\"]},{\"name\":\"bliklan-tracker-aggregator\",\"repoOwner\":\"gdncomm\",\"repoName\":\"bliklan-tracker-aggregator\",\"automationRepoPath\":\"/Users/yourname/automation-repos/bliklan-tracker-aggregator\",\"apiPatterns\":[\"**/controllers/**\",\"**/routes/**\",\"**/api/**\",\"**/*Controller*\",\"**/*Router*\"]},{\"name\":\"bliklan-compute-engine\",\"repoOwner\":\"gdncomm\",\"repoName\":\"bliklan-compute-engine\",\"automationRepoPath\":\"/Users/yourname/automation-repos/bliklan-compute-engine\",\"apiPatterns\":[\"**/controllers/**\",\"**/routes/**\",\"**/api/**\",\"**/*Controller*\",\"**/*Router*\"]},{\"name\":\"bliklan-credit\",\"repoOwner\":\"gdncomm\",\"repoName\":\"bliklan-credit\",\"automationRepoPath\":\"/Users/yourname/automation-repos/bliklan-credit\",\"apiPatterns\":[\"**/controllers/**\",\"**/routes/**\",\"**/api/**\",\"**/*Controller*\",\"**/*Router*\"]},{\"name\":\"bliklan-ads-engine\",\"repoOwner\":\"gdncomm\",\"repoName\":\"bliklan-ads-engine\",\"automationRepoPath\":\"/Users/yourname/automation-repos/bliklan-ads-engine\",\"apiPatterns\":[\"**/controllers/**\",\"**/routes/**\",\"**/api/**\",\"**/*Controller*\",\"**/*Router*\"]}]"
}
}
}
}Important: Find Your Node Path
If you're using nvm, you need to use the full path to node:
# Find your node path
which node
# Example output: /Users/yourname/.nvm/versions/node/v21.5.0/bin/nodeUse this full path in the "command" field.
Update Paths
Replace in the config:
/path/to/your/nodeβ Your actual node path (fromwhich node)/path/to/api-test-mcp-serverβ Where you cloned this repo/Users/yourname/automation-repos/β Your actual automation repos pathgithub_pat_your_token_hereβ Your actual GitHub token
Step 6: Restart Cursor
Completely quit Cursor (Cmd+Q on macOS) and reopen it. The MCP server only loads at startup.
Step 7: Verify Setup
In Cursor, check Settings β Features β MCP Servers. You should see api-test-server with a green status.
If you see a red status, check the error message:
"Cannot use import statement outside a module" β Wrong Node.js version (need 18+)
"Service not found" β SERVICES_CONFIG not set correctly
"Bad credentials" β GitHub token is invalid or expired
Available Tools
Once configured, you can ask Cursor to use these tools:
Tool | Description | Example |
| List all configured services | "List all services" |
| Get recent commits for a service | "Get recent commits for bliklan-campaign-management" |
| Get API changes between branches | "Get API changes between master and feature/xyz" |
| Get full content of an API file | "Get the StoreAdsCampaignController.java file" |
| Get PRs for a service | "Show open PRs for bliklan-credit" |
| Extract endpoint definitions from a file | "Analyze endpoints in UserController.java" |
| Get a test template for REST/GraphQL/gRPC | "Get a REST test template" |
| Compare branches and summarize changes | "Compare master and release/SP22" |
Usage Examples
Example 1: List Services and Get Recent Commits
Use the api-test-server to list services, then get recent commits for bliklan-campaign-managementExample 2: Find API Logic
Use the api-test-server to find the logic for storeads/save-campaign API in bliklan-campaign-managementExample 3: Check Recent Changes
Get the recent commits for bliklan-credit service and show me any API-related changesExample 4: Analyze API File
Use the MCP server to get the content of src/main/java/com/gdn/bliklan/campaignmanagement/controller/StoreAdsCampaignController.java from bliklan-campaign-managementExample 5: Compare Branches
Compare master and release/SP22_RELEASE_01 branches in bliklan-campaign-management to find API changesTesting the MCP Server
Simply ask Cursor to use the tools (this is the normal workflow).
MCP Server Shows Red Status
Check Cursor Developer Tools: Help β Toggle Developer Tools β Console
Look for error messages related to "mcp" or "api-test-server"
Verify the node path is correct (use full path from
which node)Make sure the dist/index.js file exists (run
npm run build)
No API Changes Detected
Verify
apiPatternsmatch your file structureCheck if the branches you're comparing exist
Try broader patterns like
**/*.javafor testing
Adding New Services
To add a new service, update the SERVICES_CONFIG in ~/.cursor/mcp.json:
or copy the file cp /Users/ruthsan/api-test-mcp-server/cursor-mcp-config.json ~/.cursor/mcp.json
{
"name": "new-service-name",
"repoOwner": "gdncomm",
"repoName": "new-service-repo",
"automationRepoPath": "/path/to/automation/new-service",
"apiPatterns": [
"**/controllers/**",
"**/routes/**",
"**/api/**",
"**/*Controller*"
]
}Then restart Cursor.
API Patterns
Configure apiPatterns to match your codebase structure:
For Spring Boot (Java):
"apiPatterns": [
"**/controller/**",
"**/rest/**",
"**/*Controller.java",
"**/*Resource.java"
]Development
Run in Development Mode
npm run devWatch for Changes
npm run watchBuild
npm run buildProject Structure
api-test-mcp-server/
βββ src/
β βββ index.ts # Main MCP server implementation
βββ dist/ # Compiled JavaScript (generated)
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
βββ cursor-mcp-config.json # Example Cursor MCP configuration
βββ config.example.json # Example service configuration
βββ README.md # This fileAvailable Tools
8 toolsanalyze_api_endpointC
Analyze an API file and extract all endpoint definitions with their methods, paths, and handlers
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git ref to read from | |
| filePath | Yes | Path to the API file | |
| serviceName | Yes | Name of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only analysis but never states it, and gives no information about the optional ref semantics, permission requirements, or whether results are cached or scoped to a branch. Significant gaps remain for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the action and the extracted artifacts with no wasted words. Efficient, though very terse given the absent usage and behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema or annotation coverage, but the description does name the extracted fields (methods, paths, handlers), which partially compensates. However, it omits ref/branch scoping behavior and any error or permission context, leaving the definition just barely adequate for a 3-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (ref, filePath, serviceName) are already documented in the schema. The description adds no meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Analyze/extract) with a clearly named resource (API file endpoint definitions) and even states the returned fields (methods, paths, handlers). It does not explicitly differentiate itself from siblings like get_api_details or get_api_changes, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as get_api_details or get_api_changes, and no stated prerequisites (e.g., that a git ref is optional or when to supply one). The agent must infer usage entirely from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_branchesC
Compare two branches and get a summary of all changes including API-related files
| Name | Required | Description | Default |
|---|---|---|---|
| baseBranch | No | Base branch (default: main) | |
| headBranch | Yes | Head branch to compare | |
| serviceName | Yes | Name of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It hints at the return content (a summary of changes, with emphasis on API-related files) but says nothing about permissions, whether branches must exist, how large diffs are handled, or whether the comparison is local or remote.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the verb and outcome front-loaded and no filler. It is arguably under-specified rather than padded, but as structure it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no annotations and no output schema, the definition is minimally viable: it conveys the action and rough result but omits the base-vs-head semantics, output structure, and any relationship to the similar API-change siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseBranch, headBranch, and serviceName are already documented with their defaults and roles. The description only confirms that two branches are involved and adds no directionality or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (compare) and resource (two branches) plus the output shape (summary of all changes including API-related files). It is clear on its own, but it never distinguishes itself from the sibling get_api_changes, which sounds like an overlapping capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_api_changes, get_recent_commits, or get_pull_requests, and no preconditions such as needing an existing service or fetched branches. The agent is left to infer the routing entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_changesB
Get API changes between two branches or commits for a service. Detects new/modified API endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| baseBranch | No | Base branch to compare against (default: main) | |
| headBranch | No | Head branch or commit to compare | |
| serviceName | Yes | Name of the service to check for API changes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full behavioral burden, and it only partially meets it: 'Detects new/modified API endpoints' hints at the result category, but says nothing about required auth, whether it is read-only, behavior when branches are identical, or how far back the diff reaches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the primary action front-loaded before the detection detail. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only diff tool with no annotations and no output schema, the description is minimally adequate: it conveys what is compared and what is detected. It omits output shape (how changes are listed), permission requirements, and error behavior on unknown services.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter including the default for baseBranch is already documented. The description adds no extra syntax, commit-format, or branch-resolution detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get API changes) and scopes it to a service, plus names the comparison targets. It does not distinguish itself from the overlapping sibling compare_branches, so an agent cannot tell the two apart without opening both schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance is given. The overlap with sibling compare_branches (branch/commit comparison) is left entirely unaddressed, forcing the agent to infer which tool applies from names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_detailsC
Get the full content of an API file for detailed analysis
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git ref (branch/commit) to read from | |
| filePath | Yes | Path to the API file | |
| serviceName | Yes | Name of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It doesn't state whether the read is safe, whether it's read-only (though 'Get' implies it), or what happens with large files. It also doesn't mention the git ref behaviorβwhether omitting the ref defaults to a branchβwhich is important for a file-reading tool. These gaps are significant given the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple retrieval tool. However, it could be slightly more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is too sparse. It doesn't explain the return format (e.g., full file content as a string), how the git ref parameter affects the read, or any error conditions. An agent would need to guess about these behaviors, which is inadequate given the complexity of Git-based file retrieval.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds no additional parameter meaning beyond what the schema provides, such as format examples or default behavior for the ref. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (Get) and resource (full content of an API file) with an implied purpose (detailed analysis). It is distinguishable from siblings like list_services or get_api_changes, but doesn't explicitly name the differentiation. This is clear but lacks the sibling routing that would make it a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus siblings. An agent must infer that get_api_details should be used when full-file content is needed for analysis, but this is never stated. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestsC
Get pull requests for a service to find API changes in PRs
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | PR state filter | |
| serviceName | Yes | Name of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. "Get" implies a read, but nothing is said about authentication, pagination, default state behavior, rate limits, or what the returned PR records contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the action front-loaded and no filler. It is terse to the point of omitting useful context, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema and no annotations, the description covers the basic action but leaves the return shape, pagination, and default state semantics unstated. It is minimally viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema, establishing a baseline of 3. The description's "for a service" loosely corresponds to serviceName but adds no format, constraint, or default details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get pull requests for a service") and adds intent ("to find API changes in PRs"). However, it does not distinguish this tool from the sibling get_api_changes, which appears to cover similar ground, so an agent cannot fully route between them from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as get_api_changes or compare_branches. The purpose phrase implies a context, but the agent must infer when this tool wins over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_commitsC
Get recent commits for a service to identify recent changes
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO date string to get commits since | |
| perPage | No | Number of commits to fetch (default: 10) | |
| serviceName | Yes | Name of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It doesn't disclose whether this is read-only (implied by 'get' but unstated), pagination behavior, default limits, or what data each commit includes. The default perPage=10 is only in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the core action front-loaded. No wasted words, though the trailing purpose clause is somewhat redundant with the verb itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should do more to explain read-only nature, result format, and relation to sibling tools. The schema covers parameters well, but overall behavioral context is thin for a tool whose output shape is undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters including format hints ('ISO date string') and perPage default. The description adds no parameter detail beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (get) and resource (recent commits) scoped to a service, plus a purpose (identify recent changes). It doesn't differentiate from siblings like get_pull_requests or compare_branches, which also concern code activity, but the resource is specific enough to be distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives, and no exclusions. The phrase 'to identify recent changes' hints at intent but doesn't help an agent decide between this and get_pull_requests or compare_branches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_test_templateC
Get a test template based on API type and service
| Name | Required | Description | Default |
|---|---|---|---|
| apiType | Yes | Type of API | |
| httpMethod | No | HTTP method for REST APIs | |
| serviceName | Yes | Name of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says nothing about whether the returned template is read-only, whether the operation has side effects, whether results are cached, or what the response contains. For a template-retrieval tool with zero annotation coverage, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste. It is appropriately sized for a simple getter, though it is somewhat under-specified rather than maximally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and no usage context, the description does not tell the agent what it will receive or when this tool is correct versus siblings. For a 3-param tool with optional httpMethod that only applies to REST, more guidance is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters and the enum for apiType. The description only echoes the parameters implicitly ('based on API type and service') without adding format, constraint, or interaction details beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb ('Get') and resource ('test template'), which is clear enough on its own, but it does not distinguish itself from siblings like get_api_details or analyze_api_endpoint. The phrase 'based on API type and service' adds selection criteria but not a distinct purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives. The agent must guess whether this tool is for generating tests, fetching templates, or something else relative to analyze_api_endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesB
List all configured services and their automation repo paths
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose what the response contains (services and their automation repo paths), which is useful, but says nothing about whether the list is paginated, scoped to a user/workspace, or requires authentication. For a zero-parameter read tool this is acceptable but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is arguably too terse to count as exemplary structure, but nothing in it is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial no-argument listing tool with no output schema, the description covers both the action and the shape of the returned data, which is the essential information. It leaves minor gaps around ordering and scoping but nothing that would block a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly implies the call is unconditional with no filtering inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (configured services), plus the returned attribute (automation repo paths). It is clearly distinct from every sibling tool, which deal with branches, commits, PRs, and API analysis, though it does not explicitly contrast itself with any of them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The agent must infer that this is the discovery tool to call before service-specific operations, which is reasonable but entirely unstated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
analyze_api_endpoint - First observed
compare_branches - First observed
get_api_changes - First observed
get_api_details - First observed
get_pull_requests - First observed
get_recent_commits - First observed
get_test_template - First observed
list_services
TDQS
Scored across 8 tools
Most tools target distinct actions (listing services, comparing branches, extracting commits/PRs, analyzing API files). However, compare_branches and get_api_changes overlap in comparing branches for API-related changes, which could cause misselection, though descriptions provide some differentiation.
All tool names use consistent snake_case and a verb_noun pattern (list_services, get_api_changes, analyze_api_endpoint, compare_branches). The verbs vary appropriately by action without breaking the pattern.
8 tools is well-scoped for a code/API reading server; each tool covers a distinct read or analysis operation without obvious redundancy.
The surface covers service listing, branch/commit/PR inspection, API diffing, API file retrieval, endpoint analysis, and test templates. Minor gaps exist, such as general file search or branch listing, but core API-change workflows are covered.
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
A MCP server built for developers enabling Git based project management with project and personalβ¦
Create, deploy, and operate MCP servers directly from your GitHub repositories.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides detailed information about your development environment to the Cursor code editor, enabling more context-aware assistance.7MIT
- AlicenseCqualityFmaintenanceAn MCP server that enables integration with GitHub Enterprise API, allowing users to access repository information, manage issues, pull requests, workflows, and other GitHub features through Cursor.2812 npm29ISC
- FlicenseNot gradedqualityDmaintenanceAn MCP server that automates code reviews through linting, testing, and git diff analysis. It also generates conventional commit messages and detailed pull request descriptions based on file changes and code patterns.-
- AlicenseNot gradedqualityDmaintenanceA production-ready MCP server that provides AI assistants with comprehensive GitHub developer tooling including PR analysis, code review, changelog generation, dependency auditing, commit summarization, and refactoring suggestions.10 npmISC