Sourcery MCP Server
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., "@Sourcery MCP Serverlist open critical security findings across my repos"
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.
Sourcery Agent Bundle
A hybrid plugin bundle for agent-driven Sourcery security workflows: an MCP server (12 tools over Sourcery's public security API, pinned OpenAPI snapshot), two Agent Skills, and adapters for Claude Code, Cursor, Codex/ChatGPT, VS Code, Devin, Grok (CLI + Bot), Amp, Hermes, OpenClaw, and Rovo Dev CLI. The server ships as the npm package @abyssbugg/sourcery — most hosts just register npx -y @abyssbugg/sourcery@latest. See docs/COMPATIBILITY.md for per-host install steps.
What is confirmed
Sourcery's current docs say the only public API is a Team-plan REST API for security findings. The documented API base is https://api.sourcery.ai/api, and the first documented request is:
curl https://api.sourcery.ai/api/v1/security-issues \
-H "Authorization: Bearer $SOURCERY_API_KEY"Verified and pinned. The live OpenAPI document (https://api.sourcery.ai/api/openapi.json) is committed as a snapshot at openapi/sourcery-openapi.json:
Info:
Sourcery API 0.1.0 (OpenAPI 3.1.0)Fetched: 2026-09-10
SHA-256:
9fdb45e657a6406c86ea0d0def2963d534e20bec1a9c88f7d62dbc2e6807f877
Every tool and the client allow-list are wired from that snapshot. The verified surface is exactly eight operations:
Method | Path | Purpose |
GET |
| List issues (filters + cursor pagination) |
GET |
| Counts by status and severity |
GET |
| Fetch one issue |
PATCH |
| Bulk update (max 100 ids) |
GET |
| List groups (same filters) |
GET |
| Counts by status and severity |
GET |
| Fetch one group including its issues |
PATCH |
| Bulk update groups (max 100 ids) |
Related MCP server: GitGuardian MCP Server
Why the Sourcery API + Git connector split
Sourcery's PR review controls are currently documented as GitHub/GitLab comment or label commands (review, summary, guide, title, resolve, dismiss, create issue) rather than public REST endpoints. Those actions are therefore best implemented through your GitHub/GitLab connector, while Sourcery is used for security findings.
Bundle shape
Repo root = plugin root. The portable core (plugin.json + skills/ + mcp.json) follows the Agent Plugins 1.0.0 standard, which Cursor and OpenAI (Codex, ChatGPT desktop) load natively; the other files are thin per-host adapters.
sourcery-agent-bundle/
plugin.json # Agent Plugins core manifest
mcp.json # portable stdio wiring -> bin/sourcery
skills/
sourcery-triage/SKILL.md # findings triage workflow
sourcery-remediate/SKILL.md # minimal-change fix workflow
bin/
sourcery # launcher: dist/cli.js when built, else npx @abyssbugg/sourcery
agents/
sourcery-triager.md # read-only triage sub-agent (Claude format)
.claude-plugin/plugin.json # Claude Code manifest + userConfig API key
.mcp.json # Claude Code MCP wiring (npx)
.agents/plugins/marketplace.json # Codex/ChatGPT local marketplace entry
scripts/
install-rovodev.sh # Rovo Dev CLI wiring (mcp.json + skills)
install-local-hosts.sh # grok, amp, hermes, openclaw, VS Code, Devin
examples/
mcp.http.json # remote deployment template
hooks/ # optional hooks example (SessionStart echo; not enabled)
docs/
COMPATIBILITY.md # per-host setup matrix
grok-bot-skill.md # paste-in skill for Grok Bot
openapi/
sourcery-openapi.json # pinned spec snapshot (SHA-256 above)
src/ # TypeScript: MCP server + findings CLI (@abyssbugg/sourcery)
constants.ts # pinned facts: operations, enums, spec hash
tests/ # TypeScript tests (constants drift pin, tools, client)
python/ # Python reference implementation (server, client, prompts)
src/sourcery_agent/
tests/
package.json # npm package manifest (@abyssbugg/sourcery)
.env.example
README.mdTools
sourcery_security_snapshot: counts by status/severity plus the first page of active issues — start here for a triage overview.sourcery_list_findings: list issues withrepository_ids,issue_types,statuses,search,limit,cursor.sourcery_get_finding: fetch one issue (full record incl. source snippet and dependency graph).sourcery_get_security_counts: aggregate counts by status and severity.sourcery_bulk_update_findings: bulk status/severity changes (≤100 ids;SOLVEDis scanner-owned and rejected).sourcery_list_groups,sourcery_get_group,sourcery_get_group_counts,sourcery_bulk_update_groups: the same capabilities for issue groups.sourcery_build_fix_prompt: builds the Sourcery-style minimal-change agent prompt from a finding; the DEPENDENCY path usesfixed_versions+manifest_file_pathand renders the dependency chain.sourcery_capabilities: describes the verified surface, spec pin, and enum values.sourcery_api_request: compatibility bridge restricted to the eight verified operations.
CLI
npx -y @abyssbugg/sourcery@latest snapshot # counts + first page of active findings
npx -y @abyssbugg/sourcery@latest list --status ACTIVE --limit 50 # filterable list
npx -y @abyssbugg/sourcery@latest get 1234 # one finding in full
npx -y @abyssbugg/sourcery@latest fix-prompt 1234 # minimal-change agent promptInside an enabled plugin host, bin/sourcery runs the same CLI (it prefers a locally built dist/cli.js and otherwise falls back to npx). Add --json to any query command for scripting.
Setup
Requirements: Node 20+. Most hosts register the MCP server directly:
export SOURCERY_API_KEY='...'
npx -y @abyssbugg/sourcery@latest # stdio MCP server (no args)
npx -y @abyssbugg/sourcery@latest http # Streamable HTTP (127.0.0.1:8765/mcp)Or install it as a plugin bundle — one step per host (details in docs/COMPATIBILITY.md):
Host | Quick start |
Claude Code |
|
Cursor | symlink the repo into |
Codex CLI / ChatGPT desktop |
|
ChatGPT web | run |
VS Code / Grok / Amp / Hermes / OpenClaw |
|
Devin | skill links via the installer; |
Grok Bot | paste-in skill from |
Rovo Dev CLI |
|
For development and tests, see the Python reference implementation (its suite doubles as the bundle-packaging checker) and run npm test for the TypeScript suite. The server is built on the official MCP TypeScript SDK (@modelcontextprotocol/sdk).
Regenerating the pinned snapshot
When Sourcery publishes a spec change:
curl -sS --fail -o openapi/sourcery-openapi.json https://api.sourcery.ai/api/openapi.json
shasum -a 256 openapi/sourcery-openapi.json # update SPEC_SHA256 in src/constants.ts (+ python/src/sourcery_agent/constants.py, README/docs)
npm test # tests/constants.spec.ts fails on driftSourcery's PR review commands (review, summary, guide, title, resolve, dismiss, create issue) remain GitHub/GitLab comment or label commands — implement those through your Git provider connector, not the Sourcery REST API.
Available Tools
12 toolssourcery_api_requestB
Compatibility bridge: call one of the eight verified operations directly.
Prefer the typed tools. The path allow-list is enforced in the client; anything outside the pinned OpenAPI surface is rejected before a request is made.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| method | Yes | ||
| body_json | No | null | |
| params_json | No | {} |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose one important trait: a client-enforced path allow-list that rejects anything outside the pinned OpenAPI surface before a request is sent. It omits that method can be a mutating verb (POST/PUT/DELETE), auth requirements, and failure semantics, which matter for a raw API passthrough.
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 short sentences, front-loaded with the core purpose and the preference rule, with no filler. 'One of the eight verified operations' is slightly cryptic but costs little space.
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 four-parameter generic passthrough with no annotations, no output schema, and zero parameter documentation, the description is too thin: it never enumerates the allowed operations or shows how to construct a request, leaving the agent unable to invoke it reliably without external knowledge.
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 0% and none of the four parameters (path, method, body_json, params_json) are documented in the schema. The description mentions an allow-list for path but never explains format, JSON-string encoding of body_json/params_json, or the set of valid method/path pairs, so the gap is not compensated.
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?
It states a verb and a scope ('call one of the eight verified operations directly') and frames itself as a compatibility bridge, which separates it from the typed siblings. However, it never says what those eight operations are or which resource surface they cover, so an agent cannot tell what it can actually do with it.
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?
It gives an explicit routing rule: 'Prefer the typed tools,' which steers the agent to the specific siblings. It does not say when this fallback is the correct or only option, so the guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_build_fix_promptB
Build a minimal-change agent prompt from a Sourcery finding object.
Handles DEPENDENCY findings via fixed_versions + manifest_file_path and renders the dependency chain when dependency_graph is present.
| Name | Required | Description | Default |
|---|---|---|---|
| finding_json | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does add real behavioral context beyond the title: it describes handling of DEPENDENCY findings via fixed_versions + manifest_file_path and conditional rendering of the dependency chain when dependency_graph is present. However, it never states whether the tool is read-only, what the generated prompt looks like, or any output/permission characteristics.
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, front-loaded with the core purpose, and the conditional dependency-graph detail is placed after the main statement. No filler, though the second sentence is dense with schema-field references.
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 and no annotations, so the description should explain what it returns and whether a finding must first be serialized. It says nothing about the output prompt structure or how to supply finding_json, leaving key information for correct invocation missing.
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 0% for the single param finding_json. The description hints that the input is 'a Sourcery finding object' and references finding-internal fields, but it never explains that the param is a serialized JSON string or how to obtain it. It adds marginal meaning over the bare schema without fully compensating for the coverage gap.
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?
The description gives a specific verb and resource ('Build a minimal-change agent prompt from a Sourcery finding object'), which is clearly distinct from the sibling list/get/update tools. It is clear about what it produces, though it doesn't explicitly name a sibling alternative it should be chosen over.
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?
Usage is only implied: an agent can infer it should call this after obtaining a finding and before attempting a fix. There is no explicit when-to-use statement, no prerequisites, and no mention of alternatives (e.g. sourcery_get_finding to first fetch the object).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_bulk_update_findingsB
Bulk-update issue status/severity (max 100 ids; SOLVED cannot be set manually).
Returns updated_ids plus failed entries with reason not_found or not_eligible.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| reason | No | ||
| status | No | ||
| snoozed_until | No | ||
| severity_override | No |
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 does disclose useful traits: the 100-id batch limit, the SOLVED-manual-set restriction, and the failure reasons (not_found/not_eligible). However it omits permissions, reversibility/idempotency, and what triggers eligibility failures.
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 dense sentences with the constraint front-loaded and the return shape secondary. No filler, though the parenthetical and quoted return keys make it slightly terse.
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 5-param mutation tool with no annotations and no output schema, the description covers constraints and return structure but leaves reason and snoozed_until unexplained, so an agent cannot fully understand the update semantics.
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 0% across 5 params, so the description must compensate. It covers ids (max 100) and status/severity constraints, but the reason and snoozed_until parameters get no explanation of purpose or format. Partial compensation only.
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+resource: bulk-update findings' status/severity. The resource 'findings' clearly separates it from the sibling sourcery_bulk_update_groups, though no explicit sibling differentiation is given. Clear but not maximally distinguishing.
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?
Provides constraints (max 100 ids, SOLVED cannot be set manually) that imply when this tool applies, but offers no explicit when-to-use guidance, no alternatives (e.g., single update, or when to use reason vs status), and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_bulk_update_groupsC
Bulk-update groups (max 100 ids); a group updates when at least one issue changes.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| reason | No | ||
| status | No | ||
| snoozed_until | No | ||
| severity_override | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses one genuinely useful trait — 'a group updates when at least one issue changes' — but says nothing about what updating a group actually mutates, whether it needs elevated permissions, or whether changes are reversible.
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 tight clauses with the operation front-loaded and zero filler. However, the brevity reflects under-specification rather than disciplined conciseness for a 5-parameter mutation tool.
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?
No output schema, no annotations, and 0% parameter coverage leave real gaps: the description does not explain the return behavior, the effect of each optional field, or permissions. It is too thin for a bulk mutation endpoint.
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 0% across 5 parameters, and the description only restates the max-100 ids cap already encoded in the schema. Nothing is said about reason, status, snoozed_until, or severity_override, which need the most explanation since they drive the update's effect.
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+resource ('Bulk-update groups') and ties the cap to the operation. The resource name distinguishes it from the sibling sourcery_bulk_update_findings, though the description never explicitly names or contrasts that alternative.
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 such as sourcery_bulk_update_findings or the single-group update path. The reader is left to infer the operating context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_capabilitiesC
Return the verified Sourcery integration boundary for this bundle.
| 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 burden, and it discloses nothing about behavior: no indication of whether this is a read-only discovery call, whether it requires auth, whether results are static per bundle, or caching/rate behavior. For a tool with zero annotation coverage this is a complete 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 filler or redundancy. It is front-loaded but the brevity comes at the cost of clarity rather than wasted words.
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 output schema and no annotations, the description is the only source of information about what this call yields, yet it never explains the return shape or contents of an 'integration boundary'. The agent cannot determine what to expect or how to use the result.
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 for a zero-parameter tool applies. No parameter meaning is missing.
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?
The description pairs a verb ('Return') with a resource ('the verified Sourcery integration boundary for this bundle'), but 'integration boundary' is undefined jargon that an agent cannot map to a concrete outcome. It does not clarify how this differs from siblings like sourcery_security_snapshot or sourcery_api_request, and it largely restates the tool name's idea of 'capabilities' without saying what those capabilities are.
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 statement of when to call this tool, when not to, or which sibling it substitutes for. With 11 sibling tools covering findings, groups, security, and raw API access, the absence of any routing guidance leaves the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_get_findingB
Fetch a single security issue (full record incl. source snippet and dependency graph).
| Name | Required | Description | Default |
|---|---|---|---|
| finding_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It usefully characterizes the payload ('full record incl. source snippet and dependency graph'), which is real behavioral value, but says nothing about permissions, error behavior when an ID is missing, or whether the fetch is read-only.
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?
One short sentence, front-loaded with verb and resource, with the return-content detail parenthesized. Nothing 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 single-record getter with no output schema, no annotations, and one parameter, the description covers the return payload but omits the identifier semantics and any usage context. Adequate but noticeably thin on the parameter side.
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 0% and the description makes no reference to finding_id at all — not its format, where to obtain it, or that it is required. With one undocumented integer parameter, the description fails to compensate for the schema gap.
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 ('Fetch') and resource ('a single security issue'), and the word 'single' implicitly contrasts with the sibling sourcery_list_findings. However, it never names that sibling or otherwise positively disambiguates its role in the family.
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?
The description implies you call this when you already have one finding's identifier rather than needing a list, but it states no explicit when-to-use condition, no prerequisites, and no named alternative such as sourcery_list_findings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_get_groupB
Fetch a single issue group including all its issues and any linked tracker task.
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes |
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 usefully discloses what is returned (all issues plus any linked tracker task), but says nothing about read-only nature, required permissions, error behavior for a missing group, or response size/pagination.
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 filler. The verb and resource come first, followed by the useful return-scope detail.
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?
The tool is simple (one required integer, no nested objects, no output schema), and the description adequately conveys what is returned, partially compensating for the missing output schema. However, it leaves the only parameter completely unexplained and provides no usage or permission context.
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 0% and the single required parameter group_id is undocumented in both schema and description. The description only implies that one group is identified, without explaining the ID's format, source, or meaning, so it does not compensate for the coverage gap.
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 ('Fetch'), resource ('a single issue group'), and scope ('including all its issues and any linked tracker task'). The word 'single' implicitly separates it from sourcery_list_groups and the resource separates it from sourcery_get_finding, but no sibling is named explicitly.
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?
Usage is only implied by the return contents: you'd call it when you need full detail for one group rather than a list. There is no explicit when-to-use, when-not-to-use, or named alternative (e.g., sourcery_list_groups) to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_get_group_countsC
Aggregate group counts by status and severity.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_types | No | ||
| repository_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and delivers almost none of it. It implies a read-only aggregation but says nothing about permissions, scoping defaults, whether results are project-wide when no parameters are supplied (0 required params), or what the response contains.
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 is technically front-loaded with no filler, but here brevity reflects under-specification rather than discipline; it is too thin for a tool with two undocumented filters. Nothing is wasted, but too much is missing.
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?
Given no annotations, no output schema, no parameter descriptions, and no required parameters, an agent cannot tell how this aggregation is scoped or filtered. The definition leaves the caller guessing about inputs, defaults, and result shape.
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?
Both parameters (issue_types, repository_ids) have 0% schema description coverage and the description does not mention either of them. Worse, it names 'status and severity,' which are not parameters at all, so it does not compensate for the coverage gap and can actively mislead about what is accepted as input.
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?
The description states a verb and resource ('Aggregate group counts') and names the dimensions (status, severity), which is more than a tautology. However, it never defines what a 'group' is and does not distinguish itself from the sibling sourcery_get_security_counts, which sounds near-identical in 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?
There is no when-to-use guidance, no mention of prerequisites, and no routing to or away from alternatives such as sourcery_get_security_counts or sourcery_list_groups. Usage is only weakly implied by the tool name and one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_get_security_countsC
Aggregate issue counts by status and severity.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_types | No | ||
| repository_ids | No |
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 not state that this is a read-only aggregation, whether it covers the whole tenant or only accessible repositories, whether an empty result is possible, or what the returned counts look like. For a net-new description with zero annotation coverage, this is a significant 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 front-loaded sentence with no filler; it is efficient and readable. It is arguably too lean for the tool's complexity, but there is no wasted language to trim.
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 two undocumented input parameters, the description is too thin. It does not explain what is counted, how the filters constrain the aggregation, or what the caller receives, leaving the agent to guess at both inputs and return shape.
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 0% and neither of the two parameters (issue_types, repository_ids) is documented in the description. Worse, the description names 'status' and 'severity', which are output grouping dimensions, not inputs, so it does not compensate for the coverage gap and arguably points the agent at the wrong fields.
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 (aggregate) and resource (issue counts) plus the grouping dimensions (status, severity), so an agent can infer it returns summary counts rather than individual findings. It does not differentiate itself from close siblings like sourcery_get_group_counts, and the term 'issue' vs. the sibling family's 'findings' creates mild terminology ambiguity.
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 statement of when to prefer this over sourcery_security_snapshot or sourcery_get_group_counts, and no prerequisites. The agent must infer the routing decision entirely from the names of siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_list_findingsB
List security issues with spec filters; pass a previous next_cursor to page.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No | ||
| statuses | No | ||
| issue_types | No | ||
| repository_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses the pagination contract (a next_cursor is returned and can be passed back), which is real behavioral context, but says nothing about default limit, read-only nature, or result volume beyond the implied list semantics.
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 tight sentence with the core action front-loaded and the paging tip second. It is efficient, though arguably too terse given how much parameter surface goes undocumented.
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 six-parameter, zero-description-coverage tool with no annotations and no output schema, the description leaves most of the contract (filter fields, enum values, limits, result shape) unspecified. Only pagination is addressed.
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 0% and none of the six parameters are named in the description beyond the generic phrase 'spec filters' and the cursor mention. The cursor behavior is the one genuinely useful hint added, but limit, search, statuses, issue_types, and repository_ids remain unexplained anywhere.
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+resource ('List security issues') and the mechanism (filters, cursor paging), which distinguishes it from the singular sourcery_get_finding and the aggregate sourcery_get_security_counts. However 'spec filters' is vague phrasing that doesn't name what can be filtered, so differentiation is only partial.
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?
Implies usage ('pass a previous next_cursor to page') which tells the agent how to continue iteration, but gives no guidance on when to choose this over sourcery_get_security_counts, sourcery_security_snapshot, or sourcery_get_finding. No prerequisites or exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_list_groupsC
List security issue groups (same filters as findings; groups aggregate one rule/package).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No | ||
| statuses | No | ||
| issue_types | No | ||
| repository_ids | No |
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 never states that this is a read-only listing, that results are paginated via limit/cursor, what auth or scope is required, or what the group objects contain. For a 6-parameter list tool with zero annotation coverage this is a substantial 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 dense sentence, front-loaded with the action and resource and appending the one clarifying fact that matters (what a group is). Nothing is wasted, though the extreme brevity is partly what leaves the other dimensions thin.
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 6 undocumented parameters, no annotations, and no output schema, the definition leaves the agent guessing on filtering syntax, pagination, and result shape. The pointer to findings' filters is the only aid and it is insufficient on its own.
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 0% across 6 parameters, so the description must compensate and does not. 'Same filters as findings' is only a cross-reference to a sibling tool; it explains no parameter's format, allowed enum values (statuses, issue_types), or pagination semantics beyond what the raw schema already encodes.
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?
The description gives a specific verb+resource ('List security issue groups') and adds a genuine conceptual distinction from findings: groups 'aggregate one rule/package.' That aggregation semantics is enough for an agent to tell groups apart from individual findings, though the sibling sourcery_list_findings is not named explicitly.
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?
The parenthetical 'same filters as findings' implies usage context and the aggregation note hints at when groups are preferable to findings, but there is no explicit when-to-use/when-not guidance and no mention of the neighboring sourcery_get_group, sourcery_get_group_counts, or sourcery_bulk_update_groups alternatives. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcery_security_snapshotC
Triage overview: counts by status/severity plus the first page of active issues.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| issue_types | No | ||
| repository_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses return composition (counts plus first page of active issues), which is useful, but says nothing about read-only nature, pagination continuation beyond 'first page', how filters narrow results, or auth requirements.
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 filler. It is efficient, though its brevity is partly the cause of the missing parameter and behavioral detail.
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 read tool with no annotations and no output schema, the description is only partially sufficient: return contents are sketched but parameter behavior and pagination are absent, so an agent cannot call it confidently with filters.
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 0% and the description never mentions limit, issue_types, or repository_ids. The phrase 'first page' faintly hints at a limit but gives no name, default, or interaction semantics, leaving all three parameters undocumented.
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 noun ('triage overview') and details the payload ('counts by status/severity plus the first page of active issues'), so the agent knows what it gets back. However, it does not distinguish itself from siblings like sourcery_get_security_counts or sourcery_list_findings, which it appears to combine.
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?
'Triage overview' implies a first-pass survey use case, giving implicit guidance. But there is no explicit when-to-use statement and no mention of when to prefer the dedicated counts or findings tools, so routing remains inferential.
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.
12 tool updates
v0.2.4- First observed
sourcery_api_request - First observed
sourcery_build_fix_prompt - First observed
sourcery_bulk_update_findings - First observed
sourcery_bulk_update_groups - First observed
sourcery_capabilities - First observed
sourcery_get_finding - First observed
sourcery_get_group - First observed
sourcery_get_group_counts - First observed
sourcery_get_security_counts - First observed
sourcery_list_findings - First observed
sourcery_list_groups - First observed
sourcery_security_snapshot
TDQS
Scored across 12 tools
Tools are organized around three distinct resources (findings, groups, counts) with clear actions, but there is overlap between sourcery_security_snapshot, sourcery_get_security_counts, and sourcery_get_group_counts, which could cause confusion about which to use for simple count retrieval. The compatibility bridge sourcery_api_request overlaps with all typed operations.
Nearly all tools follow a consistent 'sourcery_verb_noun' pattern (list_findings, get_group, bulk_update_findings, build_fix_prompt). Slight inconsistency in 'security_snapshot' and 'api_request' which are nouns rather than verb_noun, but overall very predictable.
12 tools is a reasonable number for a security finding management server. The presence of both typed tools and a generic API request bridge is slightly redundant but justified as a compatibility layer.
The server provides full lifecycle coverage for findings and groups (list, get, bulk update) and helpful aggregation tools. However, it lacks single-item update operations (only bulk), and does not support creating or deleting findings/groups, which may be by design but creates minor gaps for common workflows.
Maintenance
Related MCP Connectors
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Related MCP Servers
AlicenseBqualityDmaintenanceAllows developers to query security findings (SAST issues, secrets, patches) using natural language within AI-assisted tools like Claude Desktop, Cursor, and other MCP-compatible environments.179MIT- AlicenseNot gradedqualityAmaintenanceEnables AI agents to scan projects for leaked secrets and manage security incidents using GitGuardian's comprehensive API. It supports automated secret detection, honeytoken creation, and remediation workflows to secure codebases without context switching.37MIT
- AlicenseAqualityDmaintenanceAgent-native "safe to ship?" security gate for AI-generated code. Uses real parsers and inter-rocedural taint analysis (JS/TS, Python, Go) to flag the classes AI coding agents get wrong — secrets, SQL injection, SS, SSRF, path traversal, command injection, weak JWT/CORS — and ranks findings by confidence. Exposes a scan tool over MCP.110 npm2MIT
- AlicenseAqualityCmaintenanceEnables AI agents to scan code for security vulnerabilities using multiple static analysis tools, with support for filtering, deduplication, and CI/CD integration.27105 PyPI3MIT