← Back to search

@opencodehub/mcp

GitHub Actions Scanned 11d ago

OpenCodeHub — stdio MCP server exposing code-graph + group tools

C
71.1 / 100

Versions

0.5.0latest
Jun 1, 2026
0.4.5
May 29, 2026
0.4.4
May 29, 2026
0.4.3
May 29, 2026
0.4.2
May 28, 2026
+ show 5 moreshow less
0.3.2
May 15, 2026
0.3.1
May 12, 2026
0.3.0
May 12, 2026
0.2.0
May 12, 2026
0.1.0
May 11, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 26

detect_changes
annotations: verified low

Parse the repo's git diff for the requested scope (unstaged, staged, all, or compared to a ref) and map every changed line back to indexed symbols. Lists the affected processes so agents can spot flows impacted by a commit before pushing.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
list_findings_delta
annotations: verified low

Diff the latest scan (`.codehub/scan.sarif`) against the frozen baseline (`.codehub/baseline.sarif` by default) and return findings bucketed into new / fixed / unchanged / updated, keyed on `partialFingerprints['opencodehub/v1']`. Read-only: reads SARIF files, writes nothing.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
list_dead_code
annotations: verified low

Classify every callable / type in the indexed graph as live, dead, or unreachable-export and return the non-live set. Also surfaces ghost communities — Leiden clusters whose every member is classified non-live.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
risk_trends
annotations: verified low

Classify each community's recent risk arc over persisted snapshots. Returns { trend: accelerating_risk | degrading | improving | stable, projectedRisk30d, currentRisk } per community plus an overall trend. Snapshots are populated by `codehub analyze`; if the history is empty this tool returns overallTrend='stable' and an empty map.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
group_query
annotations: verified low

Run BM25 against every repo in a named group and fuse the per-repo rankings with Reciprocal Rank Fusion (RRF, k=60). Useful when a concept spans client and server repos. Repos are visited in alphabetical order so ties are deterministic. Per-repo errors are reported in `per_repo[].error` and `warnings[]` — the fan-out never aborts on a single-repo failure.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
tool_map
annotations: verified low

Enumerate Tool nodes detected by the tools ingestion phase, optionally filtered by name substring. Returns name, file_path, description, and the parsed input schema (JSON-decoded when available, raw string when unparseable, null when unset). Read-only.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
scan
annotations: verified low

Spawn Semgrep + Betterleaks + OSV-Scanner (+ Bandit/Biome when the project profile supports them), merge their SARIF outputs, write `.codehub/scan.sarif`, and return a summary. Selected scanners default to the polyglot set filtered by ProjectProfile.languages. IMPORTANT: this tool has filesystem effects and spawns external processes.

readOnlyHint false openWorldHint true idempotentHint false destructiveHint false
shape_check
annotations: verified low

For each Route matching the filter, walk ACCESSES edges from the consumer files that FETCH this route and compare accessed property names against Route.responseKeys. Returns MATCH / MISMATCH / PARTIAL per consumer. Read-only.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
list_findings
annotations: verified low

Enumerate static-analysis findings stored as Finding nodes, filtered by severity, scanner, rule id, or file path substring. Findings are populated by `codehub ingest-sarif` or `codehub scan`.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
list_repos
annotations: verified low

Enumerate every repo that has been indexed by codehub on this machine. Returns name, on-disk path, last-seen commit, index timestamp, and node/edge counts per repo. Call this before any repo-scoped tool when you do not already know the repo name.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
context
annotations: verified low

Resolve a symbol to its graph node and return categorised incoming/outgoing edges (calls, imports, accesses, has_method, has_property, extends, implements, method_overrides, method_implements), process participation, OpenAPI operation links for Route targets, and file location. Use `uid` for zero-ambiguity lookup, or narrow a common name with `file_path` and/or `kind`; when a name still matches more than one node the response is a candidate list for you to pick from. Set `include_content: true` to attach the indexed source (capped at 2000 characters). The response also carries a `confidenceBreakdown` (confirmed / heuristic / unknown) tallying the provenance tier of every edge surfaced — so callers can tell whether the neighbourhood is backed by an LSP oracle or by heuristics. When the `coverage` overlay phase ingested a report, an optional `coverage` field reports `{ percent (0–1), covered, source }` for the target (per-symbol when available, else inherited from its enclosing file). The field is OMITTED when no coverage was ingested — absent coverage is UNKNOWN, never 0%, so do not treat a missing `coverage` field as untested. Finally, a top-level `cochanges` field lists files often edited together with the target's enclosing file, ranked by lift. These come from the dedicated `cochanges` table (git history), are strictly a statistical signal, and MUST NOT be treated as static code dependencies.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
impact
annotations: verified low

Walk the graph from a target symbol and group dependents by traversal depth. Depth-1 nodes will definitely break if the target's contract changes; depth-2 very likely; depth-3+ transitive. Returns a risk band (LOW/MEDIUM/HIGH/CRITICAL) derived from impactedCount + process count, plus `byDepth` groups, `affected_processes`, `affected_modules`, and a `confidenceBreakdown` (confirmed / heuristic / unknown) tallying the provenance tier of every edge traversed — low-risk verdicts are only trustworthy when `heuristic` and `unknown` are small relative to `confirmed`. When the `coverage` overlay phase ingested a report and the target has direct dependents, an optional `untestedBlastRadius` field classifies the depth-1 dependents into `untested` (known coverage below the threshold), `tested`, and `unknownCoverage` (no coverage ingested) — so you can see which directly-impacted symbols will break silently. Dependents with no ingested coverage land in `unknownCoverage`, NEVER in `untested`: absent coverage is UNKNOWN, not 0%, so do not read a missing field or an empty `untested` list as fully untested. Ambiguous names return an INVALID_INPUT error with a candidate list so the caller can re-invoke with `target_uid`, `file_path`, or `kind`. A side-section `cochanges` field lists files historically co-edited with the target's enclosing file, ranked by lift. These come from git history, not the call graph, and MUST NOT be mixed into the impactedNodes list.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
group_cross_repo_links
annotations: verified low

Emit the sourced, alpha-sorted cross-repo link graph for a named group. Loads the persisted ContractRegistry from `group_sync` and emits a `CrossRepoLink[]` with `depends_on` (consumer → producer) and `consumer_of` (producer → consumer) relations per matched contract. The `codehub-document` skill embeds this array verbatim into `.docmeta.json` v2's `cross_repo_links[]` field during Phase E; the skill also renders the `## See also (other repos in group)` footer from it. If `group_sync` has not run, `links` is empty and the hint directs the caller to run it first.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
group_status
annotations: verified low

Report per-repo index freshness for every repo in a named group. Returns node/edge counts, last-indexed timestamp, last commit, and a best-effort staleness envelope so the agent can decide whether to re-analyze before querying.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
group_sync
annotations: verified low

Walk every repo in a named group, run HTTP / gRPC / topic contract extractors, and write `<home>/.codehub/groups/<name>/contracts.json`. Returns a summary of extracted contracts + cross-links. Use this before calling `group_contracts` when you want the registry to reflect the current working tree.

readOnlyHint false openWorldHint false idempotentHint true destructiveHint false
sql
annotations: verified low

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
signature
annotations: verified low

Return a class/interface declaration plus its method and property signatures with bodies elided (stub syntax per language). For a standalone function, returns a single signature. Saves tokens vs reading the whole file.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
group_list
annotations: verified low

Enumerate every cross-repo group defined under ~/.codehub/groups. Groups bundle already-indexed repos so an agent can run one query across a whole stack (web-client + api-server + shared libs). Returns each group's name, creation timestamp, optional description, and constituent repos.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
group_contracts
annotations: verified low

Two-part surface for cross-repo contract discovery. (1) Match unresolved FETCHES edges (consumer) against Route nodes (producer) across every repo in the group — this is the graph-derived HTTP surface. (2) When `group_sync` has written a contracts.json under `<home>/.codehub/groups/<name>/`, surface its cross-links with signature + file + line for HTTP, gRPC, and topic pairings. Use this to audit cross-repo coupling after a schema change in a shared API or proto.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
owners
annotations: verified low

Enumerate the ranked set of Contributors linked to a node via OWNED_BY edges. Source is git blame; emails are SHA-256 hashed by default (plain emails only when ingestion ran with --plain-emails).

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
pack_codebase
annotations: verified low

Produce a snapshot of a registered repo. The default `pack` engine writes the deterministic

readOnlyHint false openWorldHint false idempotentHint true destructiveHint false
api_impact
annotations: verified low

Score the blast radius of changing a Route's contract. Returns risk (LOW/MEDIUM/HIGH/CRITICAL) plus the consumer files, middleware handlers, shape mismatches, and affected Process flows for every matching Route. Read-only.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
query
annotations: verified low

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
change_pack
annotations: verified low

Deterministic, diff-scoped context pack for a git range: the impacted upstream subgraph (retained, not collapsed), the 5-tier verdict, the affected tests, and o200k_base token-cost attribution (tokens saved vs. opening every impacted file blind). CI-oriented — read-only, no LLM, byte-deterministic with a content hash.

readOnlyHint true openWorldHint false idempotentHint false destructiveHint false
verdict
annotations: verified low

Composite diff verdict: auto_merge | single_review | dual_review | expert_review | block. Aggregates blast radius, community boundaries, findings, orphan grade, fix-follow-feat density, and ownership into a single decision with confidence, reasoning chain, decision-boundary distance, recommended reviewers, GitHub labels, and a PR-comment markdown string. Exit codes: 0/1/2 mapped per PRD.

readOnlyHint true openWorldHint false idempotentHint false destructiveHint false
route_map
annotations: verified low

Enumerate Route nodes filtered by url substring and/or method. For each route returns the static responseKeys (when detected), the HANDLES_ROUTE handlers (Files or Operations pointing at the route), and the FETCHES consumers (caller symbols). Read-only.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false

Permissions 4

network medium
Server uses network capabilities via: fetch()
filesystem low
Server uses filesystem capabilities via: fs, fs sync ops, fs/promises, path
shell high
Server uses shell capabilities via: child_process, spawn()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 92

info
Tool 'signature' annotations are consistent annotation_checker · 80%
info
Tool 'group_list' annotations are consistent annotation_checker · 80%
info
Tool 'group_contracts' annotations are consistent annotation_checker · 80%
info
Tool 'owners' annotations are consistent annotation_checker · 80%
info
Tool 'pack_codebase' annotations are consistent annotation_checker · 80%
info
Tool 'api_impact' annotations are consistent annotation_checker · 80%
info
Tool 'query' annotations are consistent annotation_checker · 80%
info
Tool 'change_pack' annotations are consistent annotation_checker · 80%
info
Tool 'verdict' annotations are consistent annotation_checker · 80%
info
Tool 'route_map' annotations are consistent annotation_checker · 80%
medium
OAuth implementation without PKCE auth_checker · 75%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Excessive dependency count: 96 direct dependencies dependency_analyzer · 90%
medium
Vulnerable dependency: fast-xml-parser@5.9.3 (GHSA-8r6m-32jq-jx6q) dependency_analyzer · 95%
medium
Vulnerable dependency: astro@7.0.6 (GHSA-4g3v-8h47-v7g6) dependency_analyzer · 95%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/ingestion/src/pipeline/phases/content-cache.test.ts:19 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/ingestion/src/pipeline/phases/content-cache.test.ts:20 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/ingestion/src/pipeline/dep-parsers/license.test.ts:135 entropy_analyzer · 70%
info
Tool 'detect_changes' annotations are consistent annotation_checker · 80%
info
Tool 'list_findings_delta' annotations are consistent annotation_checker · 80%
info
Tool 'list_dead_code' annotations are consistent annotation_checker · 80%
info
Tool 'risk_trends' annotations are consistent annotation_checker · 80%
info
Tool 'group_query' annotations are consistent annotation_checker · 80%
info
Tool 'tool_map' annotations are consistent annotation_checker · 80%
info
Tool 'scan' annotations are consistent annotation_checker · 80%
info
Tool 'shape_check' annotations are consistent annotation_checker · 80%
info
Tool 'list_findings' annotations are consistent annotation_checker · 80%
info
Tool 'list_repos' annotations are consistent annotation_checker · 80%
info
Tool 'context' annotations are consistent annotation_checker · 80%
info
Tool 'impact' annotations are consistent annotation_checker · 80%
info
Tool 'group_cross_repo_links' annotations are consistent annotation_checker · 80%
info
Tool 'group_status' annotations are consistent annotation_checker · 80%
info
Tool 'group_sync' annotations are consistent annotation_checker · 80%
info
Tool 'sql' annotations are consistent annotation_checker · 80%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/core-types/src/hash.test.ts:6 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/core-types/src/hash.test.ts:12 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/core-types/src/hash.test.ts:18 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/embedder/src/model-pins.test.ts:62 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/embedder/src/model-pins.test.ts:67 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/embedder/src/model-pins.test.ts:72 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/embedder/src/model-pins.test.ts:79 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/embedder/src/model-pins.ts:54 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/embedder/src/model-pins.ts:61 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/embedder/src/model-pins.ts:86 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/embedder/src/model-pins.ts:99 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/analysis/src/page-rank.test.ts:74 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/cli/src/scip-pins.ts:142 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/cli/src/scip-pins.ts:166 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/cli/src/scip-pins.ts:202 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/cli/src/scip-pins.ts:208 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/cli/src/scip-pins.ts:251 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/cli/src/scip-pins.ts:258 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/cli/src/scip-pins.ts:273 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/cli/src/scip-pins.ts:314 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in theagenticguy-opencodehub-32be5a6/packages/mcp/src/tools/change-pack.parity.test.ts:110 entropy_analyzer · 70%
info
package.json metadata manifest_parser · 100%
info
Tool: detect_changes manifest_parser · 85%
info
Tool: list_findings_delta manifest_parser · 85%
info
Tool: list_dead_code manifest_parser · 85%
info
Tool: risk_trends manifest_parser · 85%
info
Tool: group_query manifest_parser · 85%
info
Tool: tool_map manifest_parser · 85%
info
Tool: scan manifest_parser · 85%
info
Tool: shape_check manifest_parser · 85%
info
Tool: list_findings manifest_parser · 85%
info
Tool: list_repos manifest_parser · 85%
info
Tool: context manifest_parser · 85%
info
Tool: pack_codebase manifest_parser · 85%
info
Tool: api_impact manifest_parser · 85%
info
Tool: impact manifest_parser · 85%
info
Tool: group_cross_repo_links manifest_parser · 85%
info
Tool: group_status manifest_parser · 85%
info
Tool: group_sync manifest_parser · 85%
info
Tool: sql manifest_parser · 85%
info
Tool: signature manifest_parser · 85%
info
Tool: group_list manifest_parser · 85%
info
Tool: group_contracts manifest_parser · 85%
info
Tool: owners manifest_parser · 85%
info
Tool: query manifest_parser · 85%
info
Tool: change_pack manifest_parser · 85%
info
Tool: verdict manifest_parser · 85%
info
Tool: route_map manifest_parser · 85%
info
Transport: stdio manifest_parser · 90%
info
Required env vars (18) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
low
Permission: filesystem access detected permission_analyzer · 90%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Tool poisoning in 'list_repos': Cross-tool sequencing directive poisoning · 85%
info
SBOM generated: 66 components sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%