Skip to main content
Glama
renatomarinho

Codacy MCP Server

Codacy MCP Server โ€” Vurb.ts Edition

The official Codacy MCP Server reimagined with the Vurb.ts framework โ€” structured perception for AI agents.

Vurb.ts License TypeScript


11 Tools - 44 actions available on-demand

Related MCP server: CodeAlive MCP

3 Prompts MCP prompts โ€” code-review, security-audit, repo-health

IMPORTANT

๐Ÿค– Zero lines of human code.

An AI agent (Antigravity, Opus 4.6) read a framework's llms.txt and a 488-line skill file. That's all it knew about Vurb.ts. From that, it built a complete production codebase from scratch: 11 tools ยท 44 actions ยท 12 models ยท 11 presenters ยท 3 prompts ยท 105 tests No human wrote a single line.

The thesis of Vurb.ts: if an AI agent can learn a framework from its llms.txt and produce production-grade code on the first attempt โ€” the framework is doing its job.

NOTE

๐Ÿ“ Designed for agents, not for humans.

Traditional frameworks optimize for human ergonomics โ€” tutorials, documentation, months of learning curve. Vurb.ts inverts this entirely. Its fluent API, llms.txt, and skill system were designed so that an AI agent can become productive in a single context window. The learning curve isn't short โ€” it's zero. The agent reads the spec, understands the patterns, and ships. This codebase is the proof.


Why Vurb.ts?

The original Codacy MCP Server is a solid, production-grade implementation. This edition rebuilds it using the Vurb.ts MVA (Model ยท View ยท Agent) pattern โ€” a framework designed specifically for MCP servers that gives AI agents structured, high-fidelity perception instead of raw JSON dumps.

Key advantages of the Vurb.ts approach:

  • ๐Ÿง  Structured Perception โ€” Presenters transform raw API data into optimized, LLM-readable formats with semantic annotations, HATEOAS navigation links, and severity-based suggestions

  • ๐Ÿ›ก๏ธ Guardrails โ€” Middleware (requireAuth), egress limits, idempotent mutation markers, and DLP redaction (secrets are stripped before reaching the wire)

  • ๐Ÿ“‹ Prompt Templates โ€” First-class support for MCP prompts (code-review, security-audit, repo-health) with dynamic argument injection

  • ๐Ÿ”„ State Sync โ€” Declarative cache invalidation policies ensure mutations automatically refresh dependent queries

  • ๐Ÿงฉ Fluent API โ€” Each tool action is defined as a composable, type-safe chain โ€” no manual JSON schemas or handler wiring

  • ๐Ÿ“ฆ Zero Code Generation โ€” No auto-generated OpenAPI client; a lightweight typed HTTP client is all that's needed

  • ๐Ÿ—‚๏ธ Grouped Exposition โ€” 44 actions exposed as 11 namespace tools, avoiding context window explosion


Capability Matrix

Capability

Original

Vurb.ts

Security & DLP

Auth middleware with self-healing errors

โŒ

โœ…

Secret redaction before wire (DLP)

โŒ

โœ…

Egress size limits per action

โŒ

โœ…

Safe process execution (execFileSync) for analysis

โŒ

โœ…

Determinism & Guardrails

Typed input schemas (Zod)

โŒ

โœ…

Idempotent mutation markers

โŒ

โœ…

Declarative cache invalidation

โŒ

โœ…

.instructions() with common-mistake guardrails

โŒ

โœ…

Tool-redirection hints (cross-agent navigation)

โŒ

โœ…

LLM Optimization

Grouped tool exposition (โˆ’78% context tokens)

โŒ

โœ…

HATEOAS navigation links in responses

โŒ

โœ…

Severity-aware action suggestions

โŒ

โœ…

Presenter-formatted tables (vs raw JSON)

โŒ

โœ…

MCP Protocol

tools/list

โœ…

โœ…

tools/call

โœ…

โœ…

prompts/list + prompts/get

โŒ

โœ…

State sync / cache control headers

โŒ

โœ…

Developer Experience

Auto-discovery (zero manual imports)

โŒ

โœ…

Fluent builder API

โŒ

โœ…

Test suite (105 tests)

โŒ

โœ…

Hot-reload dev server

โŒ

โœ…


Grouped Tool Exposition โ€” Solving Context Explosion

This is the single most important architectural difference between the two implementations.

The Problem

The original server registers 24 flat tools in the MCP tools/list response. Every one of them โ€” with its full name, description, and JSON Schema โ€” is injected into the LLM's system prompt at the start of every conversation. This means the model must process ~4,000 tokens of tool definitions before the user even types a word.

At 44 actions, a flat approach would be even worse โ€” ~7,000+ tokens consumed permanently just by tool schemas, leaving less room for actual conversation and reasoning.

The Solution: toolExposition: 'grouped'

Vurb.ts introduces grouped tool exposition. Instead of exposing 44 individual tools, the MCP server advertises only 11 namespace routers:

Original (flat)                    Vurb.ts (grouped)
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
codacy_list_organizations          codacy_organizations     โ†’ 2 actions
codacy_list_organization_repos     codacy_repositories      โ†’ 3 actions
codacy_list_repository_issues      codacy_issues            โ†’ 7 actions
codacy_search_org_srm_items        codacy_security          โ†’ 6 actions
codacy_search_repo_srm_items       codacy_tools             โ†’ 6 actions
codacy_list_files                  codacy_files             โ†’ 4 actions
codacy_get_file_issues             codacy_pull_requests     โ†’ 6 actions
codacy_get_file_coverage           codacy_commits           โ†’ 3 actions
codacy_get_file_clones             codacy_overview          โ†’ 2 actions
codacy_get_file_with_analysis      codacy_quality           โ†’ 3 actions
codacy_list_repository_pull_reqs   codacy_cli               โ†’ 2 actions
codacy_get_repository_pull_req     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
codacy_list_pull_request_issues    11 tools in system prompt
                                   44 actions available on-demand
codacy_get_pr_files_coverage
codacy_get_pr_git_diff
codacy_get_repository_analysis
codacy_list_tools
codacy_list_repo_tools
codacy_get_pattern
codacy_list_repo_tool_patterns
codacy_get_issue
codacy_setup_repository
codacy_cli_analyze
codacy_cli_install
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
24 tools in system prompt

How the LLM Navigates

The model interacts with the 11 namespace tools using an action parameter. It works like a progressive disclosure pattern:

Step 1 โ€” Discovery. The LLM sees 11 high-level tools with concise descriptions. Each tool's schema has an action enum listing available actions:

codacy_security โ†’ actions: [search_org, search_repo, dashboard, sbom_search, ossf_scorecard, ignore]

Step 2 โ€” Selection. When the user asks "show me security vulnerabilities in my repo", the LLM picks codacy_security with action: "search_repo". The remaining 43 action schemas are never loaded into context.

Step 3 โ€” Navigation. Presenters include HATEOAS-style links in their response, guiding the LLM to the next logical tool:

๐Ÿ”— Next steps: codacy_issues.list (for code quality) ยท codacy_security.dashboard (for summary)

Context Window Impact

Metric

Original (flat)

Vurb.ts (grouped)

Tools in tools/list

24

11

Actions available

24

44 (+83%)

JSON Schema surface (tool definitions)

29,316 chars across 718 lines

Derived from fluent chain โ€” no hand-written schemas

Fewer tools in the system prompt means the LLM spends less context budget on tool schemas and more on actual reasoning โ€” a critical advantage for models with limited context windows.


Developer Experience โ€” Side by Side

The same security search tool in both implementations:

// tools/searchSecurityItemsTool.ts (124 lines)
export const searchRepositorySecurityItemsTool = {
  name: toolNames.CODACY_LIST_REPOSITORY_SRM_ITEMS,
  description: `Tool to list security...
   \n ${rules}
   \n ${generalRepositoryMistakes}`,
  inputSchema: {
    type: 'object',
    properties: {
      ...repositorySchema,
      ...getPaginationWithSorting('...'),
      options: {
        type: 'object',
        properties: {
          priorities: {
            type: 'array',
            items: { type: 'string',
              enum: ['Low','Medium','High','Critical']
            },
          },
          scanTypes: { /* ... 20 more lines */ },
          categories: { /* ... 15 more lines */ },
          statuses: { /* ... 8 more lines */ },
        },
      },
    },
    required: ['provider','organization','repository'],
  },
};

// handlers/security.ts (35 lines)
export const handler = async (args: any) => {
  const { provider, organization, repository,
    cursor, limit, sort, direction, options
  } = args;
  return await SecurityService.searchSecurityItems(
    provider, organization,
    cursor, limit, sort, direction,
    { ...options, repositories: [repository] }
  );
};

// index.ts โ€” manual tool registration
codacy_search_repository_srm_items: {
  tool: Tools.searchRepositorySecurityItemsTool,
  handler: Handlers.searchRepoSecurityItemsHandler,
},
// codacy_security.tool.ts โ€” complete
export const searchRepo = security
  .query('search_repo')
  .describe('Search security findings within a repository.')
  .instructions(`Repo-level security search.
    Uses the organization-level API filtered by repo.
    Scan types: SAST, SCA, Secrets, IaC, CICD.
    DAST and PenTesting are org-level only.`)
  .fromModel(CodacyScopeModel, 'repo')
  .withOptionalEnum('priority', SEVERITY_LEVELS)
  .withOptionalEnum('category', SECURITY_CATEGORIES)
  .withOptionalEnum('scanType', REPO_SCAN_TYPES)
  .withOptionalEnum('status', SECURITY_STATUSES)
  .withOptionalNumber('cursor')
  .withOptionalNumber('limit')
  .egress(1 * 1024 * 1024)
  .returns(SecurityPresenter)
  .handle(async (input, ctx) => {
    const body = { repositories: [input.repository] };
    if (input.priority) body.priorities = [input.priority];
    if (input.category) body.categories = [input.category];
    return ctx.client.post(
      `organizations/${input.provider}/${input.organization}/security/search`,
      body,
      { cursor: input.cursor, limit: input.limit ?? 50 },
    );
  });

What you don't write with Vurb.ts:

  • โŒ No JSON Schema objects โ€” input types derived from fluent chain

  • โŒ No handler wiring โ€” autoDiscover() replaces manual registration

  • โŒ No OpenAPI codegen โ€” lightweight HTTP client replaces 3,000+ generated lines

  • โŒ No any types โ€” full type inference from model to presenter


๐Ÿ”’ What Reaches the LLM โ€” The Security Gap

The original server sends every API field directly to the LLM provider via JSON.stringify (index.ts:172). No filtering, no size limit, no redaction.

Here is what happens to each field from a Secrets detection scan:

API Field

โŒ Without Vurb.ts

โœ… With Vurb.ts

How

title

"Hardcoded AWS Secret Key" โ†’ sent to LLM

"Hardcoded AWS Secret Key" โ†’ sent to LLM

โ€”

priority

"Critical" โ†’ sent to LLM

๐Ÿ”ด Crit โ†’ semantic badge

Presenter

apiToken

โš ๏ธ "cda_tk_9f8e7d6c5b4a3..." โ†’ sent to LLM

[REDACTED]

redactPII

internalId

โš ๏ธ 948271 โ†’ sent to LLM

Gone โ€” never serialized

Schema stripping

orgId

โš ๏ธ "org_5f8a2b1d" โ†’ sent to LLM

Gone โ€” never serialized

Schema stripping

suggestion.patchUrl

โš ๏ธ "/api/v3/internal/patches/..." โ†’ sent to LLM

Gone โ€” never serialized

Schema stripping

_links

โš ๏ธ Full internal API surface โ†’ sent to LLM

Gone โ€” never serialized

Schema stripping

247 findings

All 247 dumped (1,000+ lines)

Top results only

agentLimit: 100

Response size

Unbounded

Max 1 MB

.egress(1 * 1024 * 1024)

Next action

LLM must guess

โ†’ codacy_security.ignore

suggestActions()


Architecture Comparison


Metrics (verified)

Every number below was measured directly from the source code.

Metric

Original

Vurb.ts

Diff

Source files (hand-written)

45

42

โˆ’3

Tool definitions (src/tools/)

718 lines

โ€”

โ€”

Handlers (src/handlers/)

424 lines

โ€”

โ€”

Agents (src/agents/ โ€” tool + handler in one file)

โ€”

763 lines

โˆ’33% vs tools+handlers

Tools in tools/list response

24

11

โˆ’54%

Actions available to the LLM

24

44

+83%

MCP Prompts

0

3

+3

Test cases

0

105

+105

Runtime dependencies

6

4

โˆ’33%

Dev dependencies

9

3

โˆ’67%


Tool Actions (44)

codacy_organizations (2)

Action

Description

list

List organizations the authenticated user belongs to

list_repos

List repositories in an organization

codacy_repositories (3)

Action

Description

get

Get repository details with analysis metrics

list_branches

List branches of a repository

setup

Add or follow a repository (multi-step orchestration)

codacy_issues (7)

Action

Description

list

Search and filter code quality issues

get

Get detailed issue information

file_issues

Get issues for a specific file

pr_issues

Get issues in a pull request

quickfix_patch

Download auto-fix patches

ignore

Mark an issue as ignored

bulk_ignore

Batch ignore multiple issues

codacy_security (6)

Action

Description

search_org

Search org-level security findings

search_repo

Search repo-specific security findings

dashboard

Get security dashboard summary

sbom_search

Search SBOM dependencies

ossf_scorecard

Get OSSF Scorecard for a package/repo

ignore

Ignore a security finding

codacy_tools (6)

Action

Description

list

List all analysis tools available

repo_tools

List tools configured for a repository

get_pattern

Get a specific code pattern definition

repo_patterns

List patterns for a tool in a repository

configure

Enable/disable a tool for a repository

update_patterns

Enable/disable specific patterns

codacy_files (4)

Action

Description

list

List files with analysis metrics

get

Get file details with metrics

coverage

Get line-by-line coverage

clones

Get code duplication blocks

codacy_pull_requests (6)

Action

Description

list

List PRs with analysis status

get

Get PR details with quality results

coverage

Get file-level PR coverage

diff

Get the Git diff

trigger_ai_review

Trigger AI-powered code review

bypass

Bypass the quality gate

codacy_commits (3)

Action

Description

list

List commits with analysis status

get

Get commit details with delta statistics

issues

Get issues introduced by a commit

codacy_overview (2)

Action

Description

issues

Aggregated issue overview with charts

categories

Issue count breakdown by category

codacy_quality (3)

Action

Description

get_settings

Get quality gate thresholds for a repository

list_policies

List gate policies for an organization

get_policy

Get details of a specific gate policy

codacy_cli (2)

Action

Description

analyze

Run local analysis via CLI

install

Install the CLI


Setup

Requirements

Configuration

Add to your MCP client configuration (Cursor, VS Code, Claude Desktop, etc.):

{
  "mcpServers": {
    "codacy": {
      "command": "node",
      "args": ["dist/server.js"],
      "env": {
        "CODACY_ACCOUNT_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

Development

npm install
npm run build      # Compile TypeScript
npm run dev        # Vurb dev server (hot-reload)
npm test           # Run 105 tests
npm run inspect    # MCP Inspector

Project Structure

src/
โ”œโ”€โ”€ agents/              # Tool definitions (Fluent API)
โ”‚   โ”œโ”€โ”€ codacy_organizations.tool.ts
โ”‚   โ”œโ”€โ”€ codacy_repositories.tool.ts
โ”‚   โ”œโ”€โ”€ codacy_issues.tool.ts
โ”‚   โ”œโ”€โ”€ codacy_security.tool.ts
โ”‚   โ”œโ”€โ”€ codacy_tools.tool.ts
โ”‚   โ”œโ”€โ”€ codacy_files.tool.ts
โ”‚   โ”œโ”€โ”€ codacy_pull_requests.tool.ts
โ”‚   โ”œโ”€โ”€ codacy_commits.tool.ts
โ”‚   โ”œโ”€โ”€ codacy_overview.tool.ts
โ”‚   โ”œโ”€โ”€ codacy_quality.tool.ts
โ”‚   โ””โ”€โ”€ codacy_cli.tool.ts
โ”œโ”€โ”€ models/              # Zod schemas (data contracts)
โ”œโ”€โ”€ views/               # Presenters (LLM-optimized output)
โ”œโ”€โ”€ middleware/           # Auth, validation
โ”œโ”€โ”€ prompts/             # MCP prompt templates
โ”œโ”€โ”€ utils/               # Constants, rules, types
โ”œโ”€โ”€ context.ts           # API client + context factory
โ”œโ”€โ”€ index.ts             # Registry
โ””โ”€โ”€ server.ts            # Entry point

Usage (MCP stdio)

This server runs as a stdio MCP transport โ€” the AI client launches it as a subprocess and communicates via stdin/stdout.

Cursor / Windsurf / Claude Desktop

Add to your MCP configuration file:

  • Cursor: .cursor/mcp.json

  • Windsurf: .codeium/windsurf/mcp_config.json

  • Claude Desktop: claude_desktop_config.json

{
  "mcpServers": {
    "codacy": {
      "command": "node",
      "args": ["/absolute/path/to/codacy-vurb/dist/server.js"],
      "env": {
        "CODACY_ACCOUNT_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

VS Code (Copilot)

Add to your settings.json (Ctrl+Shift+P โ†’ Preferences: Open User Settings (JSON)):

{
  "mcp": {
    "servers": {
      "codacy": {
        "command": "node",
        "args": ["/absolute/path/to/codacy-vurb/dist/server.js"],
        "env": {
          "CODACY_ACCOUNT_TOKEN": "<YOUR_TOKEN>"
        }
      }
    }
  }
}

Get your token

  1. Go to Codacy Account โ†’ Access Management

  2. Generate an Account API Token

  3. Paste it in the CODACY_ACCOUNT_TOKEN field above

Build & run

npm install
npm run build
# The server starts automatically when the MCP client launches it via stdio

License

Apache 2.0 โ€” see LICENSE.

Available Tools

5 tools
codacy_overviewA
Read-only

[INSTRUCTIONS] Returns category-level counts โ€” use these to identify which category has the most issues, then drill down with codacy_issues.list filtering by that category.

Get issue count breakdown by quality category (Security, Performance, CodeStyle, etc.).. Select operation via the action parameter. Actions: categories, issues

Workflow:

  • 'categories': [INSTRUCTIONS] Returns category-level counts โ€” use these to identify which category has the most issues, then drill down with codacy_issues.list filtering by that category.

Get issue count breakdown by quality category (Security, Performance, CodeStyle, etc.).

  • 'issues': [INSTRUCTIONS] Returns server-rendered ECharts pie charts. Do NOT try to recalculate or re-render โ€” present them as-is. Use the breakdown to identify highest-impact areas, then drill down with codacy_issues.list using appropriate filters.

Get aggregated issue overview with server-rendered pie charts by category and severity. [Cache-Control: no-store]

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhich operation to perform
providerNoGit provider. For: categories, issues
branchNameNoBranch name. For: issues
repositoryNoRepository name. For: categories, issues
organizationNoOrganization name. For: categories, issues

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. Description adds that 'issues' returns server-rendered ECharts pie charts and instructs to present them as-is, plus cache-control hint. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is verbose and repetitive; same '[INSTRUCTIONS]' and similar phrases for each action. Could be condensed to one clear workflow without duplication.

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?

No output schema, but description explains return values (counts, pie charts) and provides workflow. Lacks error handling details but sufficient for a read-only overview 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 covers 100% of parameters. Description repeats action options but adds workflow context for 'categories' vs 'issues'. Does not add significant new meaning beyond schema for other parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns category-level counts or aggregated issue overview with pie charts. It distinguishes from sibling tools (e.g., codacy_issues.list, codacy_pull_requests) by focusing on high-level overviews and drill-down guidance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance on when to use each action: 'categories' for counts to drill down with codacy_issues.list, 'issues' for pie charts to identify high-impact areas. Also instructs not to recalculate pies. Clear alternatives and exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

codacy_pull_requestsB
Destructive

[INSTRUCTIONS] Use ONLY when the user explicitly wants to override the quality gate โ€” this is a deliberate decision with security implications. Common mistakes: (1) Bypassing without user confirmation. (2) Bypassing for quality issues that could be fixed โ€” suggest fixing first. This action is idempotent โ€” calling it twice has no additional effect.

Bypass the analysis quality gate for a pull request. Allows merging even if quality standards are not met.. Select operation via the action parameter. Actions: bypass, get, list, coverage, diff, trigger_ai_review

Workflow:

  • 'bypass': [INSTRUCTIONS] Use ONLY when the user explicitly wants to override the quality gate โ€” this is a deliberate decision with security implications. Common mistakes: (1) Bypassing without user confirmation. (2) Bypassing for quality issues that could be fixed โ€” suggest fixing first. This action is idempotent โ€” calling it twice has no additional effect.

Bypass the analysis quality gate for a pull request. Allows merging even if quality standards are not met.. Requires: pullRequestNumber [DESTRUCTIVE]

  • 'get': [INSTRUCTIONS] isUpToStandards=false means the quality gate FAILED. Investigate with codacy_issues.pr_issues and codacy_pull_requests.coverage. Common mistake: treating isUpToStandards=null as passed โ€” null means analysis is not yet complete.

Get pull request details with quality analysis results (isUpToStandards, new/fixed issues, coverage).. Requires: pullRequestNumber

  • 'list': [INSTRUCTIONS] Lists PRs with quality analysis status. Analysis reflects COMMITTED code only โ€” local changes are NOT visible. Common mistake: expecting analysis to update in real-time after a push โ€” there is processing delay. Use codacy_pull_requests.get to check if isAnalysed=true.

List pull requests in a repository with analysis status.

  • 'coverage': Get file-level coverage data for the pull request diff.. Requires: pullRequestNumber

  • 'diff': Get the Git diff for a pull request.. Requires: pullRequestNumber

  • 'trigger_ai_review': [INSTRUCTIONS] This triggers NEW work โ€” use ONLY when the user explicitly asks for an AI code review. NOT idempotent โ€” each call dispatches a new review. Prerequisite: the PR must be analysed (isAnalysed=true). If not, suggest waiting for analysis to complete. Common mistake: triggering review on unanalysed PRs โ€” check with codacy_pull_requests.get first.

Trigger a Codacy AI-powered code review on a pull request.. Requires: pullRequestNumber [DESTRUCTIVE] [Cache-Control: no-store]

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoResults per page (max 100). For: list
actionYesWhich operation to perform
cursorNoPagination cursor. For: list
providerNoGit provider. For: bypass, get, list, coverage, diff, trigger_ai_review
repositoryNoRepository name. For: bypass, get, list, coverage, diff, trigger_ai_review
organizationNoOrganization name. For: bypass, get, list, coverage, diff, trigger_ai_review
pullRequestNumberNoPull request number. Required for: bypass, get, coverage, diff, trigger_ai_review

TDQS

B3.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description states bypass is 'idempotent' but the idempotentHint annotation is false, a direct contradiction. While the description adds useful details like processing delays, the contradiction undermines trust. Score 1 due to contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is overly verbose with repeated INSTRUCTIONS blocks and nested text. For example, the bypass action repeats the same instruction twice. Could be significantly more concise.

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?

Despite no output schema, the description explains expected results for key actions (e.g., 'get' returns isUpToStandards, new/fixed issues, coverage). It covers prerequisites, processing delays, and common mistakes, making it fairly complete for agent use.

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?

Schema covers 100% of parameters. The description adds value by linking parameters to specific actions (e.g., pullRequestNumber required for bypass, get, etc.), providing context beyond the schema's descriptions.

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?

The description clearly states it manages pull request quality gates with multiple actions (bypass, get, list, etc.), distinguishing it from sibling tools like codacy_overview. However, the initial INSTRUCTIONS block clutters the core purpose, reducing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use instructions for each action, e.g., 'Use ONLY when the user explicitly wants to override the quality gate' for bypass, and warns about common mistakes. It also explains how to interpret results (e.g., isUpToStandards). Minor deduction for overlapping instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

codacy_qualityA
Read-only

[INSTRUCTIONS] Returns the full threshold configuration for a policy. Use the policyId from codacy_quality.list_policies. Thresholds define pass/fail conditions for issues, coverage, complexity, and duplication.

Get details of a specific gate policy including all thresholds.. Select operation via the action parameter. Actions: get_policy, get_settings, list_policies

Workflow:

  • 'get_policy': [INSTRUCTIONS] Returns the full threshold configuration for a policy. Use the policyId from codacy_quality.list_policies. Thresholds define pass/fail conditions for issues, coverage, complexity, and duplication.

Get details of a specific gate policy including all thresholds.. Requires: policyId

  • 'get_settings': [INSTRUCTIONS] Returns the quality gate configuration โ€” thresholds for issues, coverage, complexity, and duplication. These settings determine what isUpToStandards means for PRs and commits.

Get quality settings for a repository (commit/PR/repository thresholds).

  • 'list_policies': [INSTRUCTIONS] Gate policies are organization-level quality rules applied to repositories. Common mistake: confusing policies with repository-specific settings โ€” policies are templates, settings are per-repo. isDefault=true means this policy applies to all repos without explicit overrides.

List gate policies for an organization. [Cache-Control: no-store]

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhich operation to perform
policyIdNoGate policy ID. Required for: get_policy
providerNoGit provider. For: get_policy, get_settings, list_policies
repositoryNoRepository name. For: get_settings
organizationNoOrganization name. For: get_policy, get_settings, list_policies

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, non-destructive behavior. The description adds context about thresholds and the difference between policies and settings, and mentions cache-control for list_policies. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is verbose and contains repetitive phrases (e.g., the same sentence appears for get_policy and the top-level description). It could be streamlined significantly without losing clarity.

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?

Adequately explains each action's purpose and prerequisites. However, lacks details about return values or error handling. For a read-only tool with 5 parameters and no output schema, this is sufficient but not exceptional.

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 baseline 3. The description repeats what the schema already states (e.g., policyId required for get_policy) without adding new semantic information. Minimal extra value.

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?

The description clearly states the tool handles quality gate operations (policies, settings, listing) and distinguishes from sibling tools which cover different areas (overview, PRs, repos, security). However, the description is somewhat repetitive and could be more concise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides workflow instructions for each action (e.g., 'get_policy' requires policyId from 'list_policies') and warns against confusing policies with settings. Does not explicitly state when not to use this tool versus siblings, but the domain distinction is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

codacy_repositoriesA
Destructive

[INSTRUCTIONS] Returns the overall repository health: Grade (A-F scale), coverage %, complexity, issue count. Common mistake: assuming Grade=A means zero issues โ€” the grade is a composite score. Use codacy_issues.list for the actual issue breakdown.

Get repository details with analysis metrics (grade, coverage, complexity, issues).. Select operation via the action parameter. Actions: get, list_branches, setup

Workflow:

  • 'get': [INSTRUCTIONS] Returns the overall repository health: Grade (A-F scale), coverage %, complexity, issue count. Common mistake: assuming Grade=A means zero issues โ€” the grade is a composite score. Use codacy_issues.list for the actual issue breakdown.

Get repository details with analysis metrics (grade, coverage, complexity, issues).

  • 'list_branches': [INSTRUCTIONS] Lists all branches tracked by Codacy analysis. The default branch is the one being analyzed โ€” other branches may have limited or no analysis data.

List branches of a repository.

  • 'setup': [INSTRUCTIONS] Use ONLY when the user explicitly wants to add a new repository for analysis. This is a multi-step action: it will (1) find the organization, (2) join it if needed, (3) find the repository, and (4) add or follow it. Common mistake: calling setup on an already-tracked repository โ€” it will return a success message without re-adding. This action invalidates organization and repository caches.

Add or follow a repository in Codacy. This sets up analysis tracking. [DESTRUCTIVE] [Cache-Control: no-store]

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhich operation to perform
providerNoGit provider. For: get, list_branches, setup
repositoryNoRepository name. For: get, list_branches, setup
organizationNoOrganization name. For: get, list_branches, setup

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark destructiveHint=true. Description elaborates: setup invalidates caches, marks as [DESTRUCTIVE] [Cache-Control: no-store], and notes that Grade=A may not mean zero issues. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is repetitive, especially the 'get' action instructions appearing twice. It includes redundant '[INSTRUCTIONS]' tags and could be half the length without losing clarity.

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?

Given 4 parameters, no output schema, and annotations present, the description covers usage, workflow, common mistakes, and behavioral traits effectively. However, missing details about return format (e.g., data structure) slightly reduce completeness.

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?

Schema coverage is 100% and describes each parameter concisely. The description adds value by explaining the workflow for each action and the meaning of 'get' output, but does not deeply elaborate on parameter syntax beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the tool returns repository health metrics (grade, coverage, complexity, issues) and lists three distinct actions (get, list_branches, setup). It distinguishes from sibling tools by focusing on repository-level analysis versus overviews or pull requests.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use setup ('only when user wants to add a new repository'), warns against calling setup on already-tracked repos, and directs to codacy_issues.list for actual issue breakdown, providing clear alternative usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

codacy_securityA
Destructive

Get the security dashboard summary for a repository.. Select operation via the action parameter. Actions: dashboard, ignore, ossf_scorecard, sbom_search, search_org, search_repo

Workflow:

  • 'dashboard': Get the security dashboard summary for a repository.

  • 'ignore': [INSTRUCTIONS] Use when the user explicitly wants to mark a security finding as ignored. Always provide a reason: FalsePositive, WontFix, or NotRelevant. Common mistakes: (1) Do NOT invent reasons. (2) Ignoring without user confirmation โ€” this is a security decision, always confirm. This action is idempotent โ€” calling it twice with the same srmItemId has no additional effect.

Ignore or unignore a security finding.. Requires: srmItemId, reason [DESTRUCTIVE]

  • 'ossf_scorecard': [INSTRUCTIONS] Accepts either a repository URL (e.g., https://github.com/org/repo) or a purl (e.g., maven:ch.qos.logback:logback-classic:1.2.3). At least one is required. Common mistake: not providing either url or purl โ€” the API requires at least one identifier. Use the purl from SBOM search results.

Get the OSSF Scorecard for a repository or package. Returns security posture score.

  • 'sbom_search': [INSTRUCTIONS] Supply chain security investigation โ€” search SBOM dependencies by name, vulnerability severity, or risk category. Common mistakes: (1) Confusing SBOM search with security findings โ€” SBOM shows dependencies, use codacy_security.search_repo for code-level findings. (2) Risk categories: Forbidden, Risky, Normal โ€” do NOT invent categories. Use purl (Package URL) as the universal identifier for cross-referencing with OSSF Scorecard.

Search SBOM dependencies across the organization. Find vulnerable packages by name, severity, or risk category.

  • 'search_org': [INSTRUCTIONS] Cross-repository security overview at the organization level. For repository-specific findings, use codacy_security.search_repo instead. Scan types: SAST, SCA, Secrets, IaC, CICD (repo-level). DAST and PenTesting are organization-level only. Common mistakes: (1) Using this for code quality issues โ€” use codacy_issues instead. (2) Status values: OnTrack, DueSoon, Overdue (open), ClosedOnTime, ClosedLate, Ignored (closed) โ€” do NOT invent statuses.

Search organization-level security findings across all repositories.

  • 'search_repo': [INSTRUCTIONS] Repository-scoped security search. Uses the organization-level API filtered by this repository. Scan types available at repo level: SAST, SCA, Secrets, IaC, CICD. For DAST and PenTesting, use codacy_security.search_org instead. Common mistake: using DAST or PenTesting scan types here โ€” those are organization-level only.

Search security findings within a specific repository. [Cache-Control: no-store]

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoRepository URL (e.g., https://github.com/org/repo). For: ossf_scorecard
purlNoPackage URL in purl format (e.g., maven:ch.qos.logback:logback-classic:1.2.3). For: ossf_scorecard
textNoSearch by dependency name or package URL. For: sbom_search
limitNoResults per page (max 100). For: sbom_search, search_org, search_repo
actionYesWhich operation to perform
cursorNoPagination cursor. For: sbom_search, search_org, search_repo
reasonNoReason for ignoring. Required for: ignore
statusNoFilter by status (OnTrack, DueSoon, Overdue, ClosedOnTime, ClosedLate, Ignored). For: search_org, search_repo
commentNoOptional explanation comment. For: ignore
categoryNoFilter by security category (e.g., Injection, XSS, CSRF). For: search_org, search_repo
priorityNoFilter by priority. For: search_org, search_repo
providerNoGit provider. For: dashboard, ignore, sbom_search, search_org, search_repo
scanTypeNoFilter by scan type. For: search_org, search_repo
srmItemIdNoSRM item identifier. Required for: ignore
repositoryNoRepository name. For: dashboard, search_repo
organizationNoOrganization name. For: dashboard, ignore, sbom_search, search_org, search_repo
riskCategoryNoFilter by risk classification. For: sbom_search
findingSeverityNoFilter by vulnerability severity. For: sbom_search

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context (e.g., idempotency of 'ignore', cache-control for search_repo, destructive nature of ignore). However, it contradicts the annotation 'idempotentHint: false' by stating that the ignore action is idempotent. This reduces reliability.

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 well-structured with headers for each action, bullet points, and front-loaded purpose. While lengthy due to the complexity of six actions, it remains organized and avoids unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 18 parameters, no output schema, and rich annotations, the description covers all necessary context: action-specific usage, parameter requirements, common mistakes, alternatives, and behavioral notes. It is thorough for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema coverage, the description enhances parameter understanding by explaining which parameters apply to which actions, providing common mistakes, and clarifying enumerated values (e.g., status values, risk categories).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides security dashboard summary and lists six specific actions, each with a clear purpose. It distinguishes itself from sibling tools (codacy_overview, codacy_quality, etc.) by focusing exclusively on security operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit instructions for each action, including when to use alternatives (e.g., using search_org for DAST/PenTesting instead of search_repo) and common mistakes to avoid. It also differentiates from other tools like codacy_issues.

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. 5 tool updatesv1.0.0
    • First observedcodacy_overview
    • First observedcodacy_pull_requests
    • First observedcodacy_quality
    • First observedcodacy_repositories
    • First observedcodacy_security

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct area: overview, pull requests, quality policies, repository metrics, and security. There is no functional overlap; agents can clearly differentiate them.

Naming Consistency5/5

All tool names follow the pattern 'codacy_<noun>', using lowercase with underscores. The naming is uniform and predictable.

Tool Count5/5

With 5 tools, the server covers the core aspects of code quality and security analysis without being excessive or insufficient. Each tool earns its place.

Completeness3/5

The tool set provides overviews, PR analysis, quality settings, repository metrics, and security. However, it lacks a dedicated tool for listing and managing individual code issues (the instructions reference a missing 'codacy_issues.list'), which is a notable gap for detailed investigation.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A TypeScript implementation of a Model Context Protocol server that provides a frictionless framework for developers to build and deploy AI tools and prompts, focusing on developer experience with zero boilerplate and automatic tool registration.
    681 npm
    14
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A Model Context Protocol server that enhances AI agents by providing deep semantic understanding of codebases, enabling more intelligent interactions through advanced code search and contextual awareness.
    90
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server template designed for building structured tools, prompts, and resources with built-in support for HTTP and STDIO transports. It provides a standardized framework for developers to create and deploy AI-driven services using TypeScript and Zod schema validation.
    7 npm
    -
  • A
    license
    A
    quality
    B
    maintenance
    Model Context Protocol server for Verlon AI that exposes gates, logs, recommendations, and experiments as MCP tools, enabling coding agents to inspect and manage AI infrastructure natively.
    5
    100 npm
    MIT