Skip to main content
Glama

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 21

Quick Start

Step 1: Clone the Repository

git clone <repository-url>
cd api-test-mcp-server

Step 2: Install Dependencies

npm install

Step 3: Build the Server

npm run build

This 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).

  1. Go to: https://github.com/settings/tokens?type=beta

  2. Click "Generate new token"

  3. Configure:

    • Token name: api-test-mcp-server

    • Expiration: Choose appropriate duration

    • Resource owner: Select gdncomm organization

    • Repository 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

  4. Click Generate token

  5. 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/node

Use this full path in the "command" field.

Update Paths

Replace in the config:

  • /path/to/your/node β†’ Your actual node path (from which node)

  • /path/to/api-test-mcp-server β†’ Where you cloned this repo

  • /Users/yourname/automation-repos/ β†’ Your actual automation repos path

  • github_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_services

List all configured services

"List all services"

get_recent_commits

Get recent commits for a service

"Get recent commits for bliklan-campaign-management"

get_api_changes

Get API changes between branches

"Get API changes between master and feature/xyz"

get_api_details

Get full content of an API file

"Get the StoreAdsCampaignController.java file"

get_pull_requests

Get PRs for a service

"Show open PRs for bliklan-credit"

analyze_api_endpoint

Extract endpoint definitions from a file

"Analyze endpoints in UserController.java"

get_test_template

Get a test template for REST/GraphQL/gRPC

"Get a REST test template"

compare_branches

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-management

Example 2: Find API Logic

Use the api-test-server to find the logic for storeads/save-campaign API in bliklan-campaign-management

Example 3: Check Recent Changes

Get the recent commits for bliklan-credit service and show me any API-related changes

Example 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-management

Example 5: Compare Branches

Compare master and release/SP22_RELEASE_01 branches in bliklan-campaign-management to find API changes

Testing the MCP Server

Simply ask Cursor to use the tools (this is the normal workflow).


MCP Server Shows Red Status

  1. Check Cursor Developer Tools: Help β†’ Toggle Developer Tools β†’ Console

  2. Look for error messages related to "mcp" or "api-test-server"

  3. Verify the node path is correct (use full path from which node)

  4. Make sure the dist/index.js file exists (run npm run build)

No API Changes Detected

  1. Verify apiPatterns match your file structure

  2. Check if the branches you're comparing exist

  3. Try broader patterns like **/*.java for 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 dev

Watch for Changes

npm run watch

Build

npm run build

Project 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 file

Available Tools

8 tools
analyze_api_endpointC

Analyze an API file and extract all endpoint definitions with their methods, paths, and handlers

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoGit ref to read from
filePathYesPath to the API file
serviceNameYesName of the service

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
baseBranchNoBase branch (default: main)
headBranchYesHead branch to compare
serviceNameYesName of the service

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseBranchNoBase branch to compare against (default: main)
headBranchNoHead branch or commit to compare
serviceNameYesName of the service to check for API changes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoGit ref (branch/commit) to read from
filePathYesPath to the API file
serviceNameYesName of the service

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoPR state filter
serviceNameYesName of the service

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoISO date string to get commits since
perPageNoNumber of commits to fetch (default: 10)
serviceNameYesName of the service

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
apiTypeYesType of API
httpMethodNoHTTP method for REST APIs
serviceNameYesName of the service

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 8 tool updatesv1.0.0
    • First observedanalyze_api_endpoint
    • First observedcompare_branches
    • First observedget_api_changes
    • First observedget_api_details
    • First observedget_pull_requests
    • First observedget_recent_commits
    • First observedget_test_template
    • First observedlist_services

TDQS

B3.3/5.0

Scored across 8 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

8 tools is well-scoped for a code/API reading server; each tool covers a distinct read or analysis operation without obvious redundancy.

Completeness4/5

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides detailed information about your development environment to the Cursor code editor, enabling more context-aware assistance.
    7
    MIT
  • A
    license
    C
    quality
    F
    maintenance
    An 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.
    28
    12 npm
    29
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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 npm
    ISC