Carrick
Server Details
Coding agents in multi-service codebases routinely rebuild existing helpers, trust stale type definitions, and modify API contracts without knowing who consumes them.
Carrick solves this by indexing your entire TypeScript ecosystem across service and repository boundaries. By integrating deeply with the TypeScript compiler, Carrick traces every route, type, and cross-service call while recording function behaviour so agents search by intent rather than name.
Delivered via MCP for AI agents and LSP for IDEs, Carrick ensures models see existing endpoints and utilities before generating new code. The scanner is source-available and runs from your CLI or CI pipeline.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- carrick-tools/carrick
- GitHub Stars
- 7
- Server Listing
- Carrick
- ChatGPT
- –
- Claude
- Carrick
TDQS
Scored across 17 tools
Descriptions are unusually disciplined: nearly every tool ends by naming the sibling tool to use for the adjacent question (get_project_map vs get_service_graph vs get_operation; check_compatibility vs get_contract_pair vs get_endpoint_types; find_similar vs search_by_intent vs list_function_intents), so an agent can route reliably. Remaining overlap is layered rather than confused — topology is spread across get_project_map, get_service_graph, get_findings and list_services, and a first-time agent may still pick the wrong entry point before reading the cross-references.
All names are snake_case verb_noun, and the verb varies semantically rather than arbitrarily: get_* for single-resource reads, list_* for enumerations, search_/find_ for discovery, check_* for verdicts. No camelCase, no vague one-word verbs, no duplicate verbs on the same object.
Seventeen tools is slightly above the comfortable band but each maps to a distinct analytical capability (topology, contracts, types, intents, similarity, findings, dependencies, external calls, project metadata) rather than being redundant surface. It sits at the heavy end, and a couple of the topology tools could plausibly be folded together, keeping it off a 5.
Coverage of the read-only analysis domain is strong: map, graph, services, endpoints, single operation, contract pairs, verdicts, types, callers, intent search, similarity, findings, deps and external egress. Two visible gaps remain — there is no tool to trigger or refresh a scan even though findings are explicitly built per scan of main, and there is no direct callee/forward-call lookup (deferred to list_function_intents), which leaves a mild asymmetry with get_callers.
Publisher details
- Operator
- Far Harbour B.V. (Carrick) · Publisher source
- Operator website
- https://carrick.tools
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://docs.carrick.tools/connecting-your-agent
- Trust center
- Not applicable
- Restrictions
- Free tier available. Answers come from an index of the organisation's own repositories, so at least one repository must be indexed first (via Carrick CLI or the Carrick GitHub Action). Installing the Carrick GitHub App on a GitHub organisation needs an organisation owner or admin. · Publisher source
Available Tools
17 toolscheck_compatibilityCheck a consumer against a producerARead-onlyIdempotentInspect
Check a consumer service's calls against a producer's operations: missing or unused operations, plus stored type verdicts (coverage in type_verdicts). Read status first. It reads compatible, incompatible, partially_checked, or unresolved where nothing was compared, and pairs_compared and pairs_uncompared say how much of the pair the check reached. Call it before removing or changing any route, shape, field, or event. Consumers that reach the producer through a published SDK package have no call site of their own and are listed separately in via_sdk, never merged into the direct pairs. For whole-project topology, use get_service_graph first. To read both sides' types for the operations a verdict names, use get_contract_pair. Reference: https://docs.carrick.tools/mcp-tools
Inputs: consumer_service (required), producer_service (required), path, repo, +4 more.
find_similarFind similar functionsARead-onlyIdempotentInspect
Find functions that already do what you are about to write, and places this project has built the same thing twice. Pass functions with one entry per new or edited function (name and file when it is already indexed, one plain sentence when it is not) and each entry comes back with the closest functions in other files. Pass audit: true instead, with no functions, for a whole-project audit that groups the functions describing the same behaviour. A call with neither, or with both, is refused. Matching reads how the index describes a function rather than its body, and every row carries the file and line span of the function it names. For one concept rather than a set of functions, use search_by_intent.
Inputs: path, repo, audit, limit, +11 more.
get_api_endpointsList a service's operationsARead-onlyIdempotentInspect
List the operations one service exposes: HTTP endpoints, GraphQL fields, socket events. Call it when unsure which operations a service has or whether one exists. For the types of a known endpoint, use get_endpoint_types. When you already know the operation and need its producer or its consumers, use get_operation.
Inputs: service (required), repo, method, project, +1 more.
get_callersFind callers of a functionARead-onlyIdempotentInspect
List recorded direct callers of a named function, with their service, file and line span. Zero recorded callers is not safe-deletion evidence; callback and value references are unmeasured. Call it before changing or removing a function to see what a signature change would break; pass depth for transitive callers. Rows name the enclosing caller, not the call-site line. For what a function calls rather than who calls it, use list_function_intents.
Inputs: file, name, repo, depth, +2 more.
get_contract_pairCompare consumer and producer typesARead-onlyIdempotentInspect
Put one consumer and one producer side by side, operation by operation: the producer's request and response types, every consumer call site with the type that call site expects, and the type verdict the scan stored, with its scanner version. Call it when you are about to change a shape and need to know what the other side already believes it is, or when a compatibility verdict names a problem you cannot place. It reports what the index holds and adds no verdict of its own. It shows HTTP operations side by side, and only the operations a consumer call wins onto; for GraphQL, socket and pub/sub pairs, check_compatibility carries the stored verdicts. For the producer's types alone, use get_endpoint_types; for which calls match at all and which do not, use check_compatibility. Reference: https://docs.carrick.tools/mcp-tools
Inputs: consumer_service (required), producer_service (required), path, repo, +4 more.
get_endpoint_typesRead an endpoint's request and response typesARead-onlyIdempotentInspect
Read the extracted TypeScript request/response types for one endpoint instead of guessing from sample JSON. Call it before building a request body or parsing a response. For nested types, follow with get_type_definition. To read these types against the type each consumer call site expects, use get_contract_pair. Reference: https://docs.carrick.tools/mcp-tools
Inputs: path (required), method (required), service (required), repo, +1 more.
get_findingsRead the findings list on mainARead-onlyIdempotentInspect
Read the findings list on main: type mismatches between endpoints and their callers, and groups of functions that look like copies of each other, built after each scan of main. Each row carries every place as file and line, what to check, and the call that drills into it. get_project_map shows the first rows under FOUND ON MAIN; this tool lists them all, paged.
Inputs: kind, repo, limit, offset, +2 more.
get_operationFind who serves and calls an operationARead-onlyIdempotentInspect
Start here when you know an operation but not the service: given a method and a path, it returns every service that serves it, every call site that reaches it, and the recorded calls that resolved to no producer, with a file and line on each. Use it before changing or removing a route to see the blast radius, and to answer "who serves this" without guessing a service first. Every response also names what the index holds one method or one path segment away, so a call recorded under a neighbouring method or path version cannot read as a confident zero. Bounded to one operation; for the whole topology use get_service_graph, for request/response types get_endpoint_types. Reference: https://docs.carrick.tools/mcp-tools
Inputs: path (required), method (required), repo, project, +1 more.
get_project_mapShow the project mapARead-onlyIdempotentInspect
Call this first in a session: a compact plain-text map of the project, naming the sibling services this project indexes, the contracts this repo depends on, who consumes this repo, and the unmatched calls with how many of them match no route, with the drill-down tool at the end of every section. Cheap; pass service to split THIS REPO from its siblings, detail for more rows per section.
Inputs: repo, detail, project, service.
get_service_dependenciesRead npm dependencies and version conflictsARead-onlyIdempotentInspect
Read npm dependencies: one service's full package list, or org-wide conflicts when called without a service. Conflicts are graded on the semver ranges written in package.json, not on version strings: a package is listed only when no single install satisfies every service's range; error means the ranges span different majors, warning means they miss within one major. Each conflict carries a one-sentence summary naming the groups. Call it before adding or bumping a package.
Inputs: repo, project, service.
get_service_graphShow the cross-service call graphARead-onlyIdempotentInspect
Return the whole cross-service call graph in one call: consumer -> producer edges across every protocol, unmatched calls, orphaned endpoints. Use it first for topology: who depends on a service, what a change ripples into. An edge carrying via_sdk reaches its producer through a published package rather than a call site of its own. An edge carrying same_service has one service at both ends, a service calling its own operation, and is listed after the cross-service ones. For one pair in depth, use check_compatibility. For the types on both sides of one pair's operations, use get_contract_pair. On a large project, call get_project_map first: it summarises this graph section by section and names the drill-down tool for each.
Inputs: repo, limit, offset, project, +1 more.
get_type_definitionResolve a named type definitionARead-onlyIdempotentInspect
Get the fully resolved TypeScript definition of a named type, with transitive dependencies. Call it after get_endpoint_types when a type references nested types you need expanded. Accepts the Endpoint_ alias or a real symbol name.
Inputs: service (required), type_alias (required), repo, project.
list_external_callsList outbound calls to external targetsARead-onlyIdempotentInspect
Enumerate this project's recorded outbound-call candidates: SDK calls into declared dependencies, calls to declared external domains, and env-var URL bases, each with its service, file and line. Use it to inventory or audit what a service talks to outside itself; for an audit, start with view "targets" to see every distinct target with counts, then fetch call sites per target. Rows are candidates, not verified egress.
Inputs: repo, view, limit, offset, +4 more.
list_function_intentsBrowse indexed functions and intentsARead-onlyIdempotentInspect
List indexed functions with their one-line intents, paginated; filter by service or substring. The index covers every function with an intent, not just exported ones. Use it to browse what a service contains or compare what sibling repos have built. Pass file to answer "what can I call in this file" without reading it, with compact for signature-only rows. For concept queries ('dedupe users by email'), use search_by_intent instead.
Inputs: file, repo, limit, offset, +7 more.
list_projectsList workspace projectsARead-onlyIdempotentInspect
List this workspace's Carrick projects and their connected repos. Call it when unsure which project or repo value to pass. Metadata only, no scan data.
Inputs: no named parameters.
list_servicesList the project's servicesARead-onlyIdempotentInspect
List every service in the project with endpoint and call counts. Call it when unsure what exists or which repo owns a name. For the call graph, use get_service_graph.
Inputs: repo, project.
search_by_intentSearch functions by what they doARead-onlyIdempotentInspect
Search every function in this project by what it does, including sibling repos you do not have checked out. Pass a plain-English concept ('verify a webhook signature'); matches need no keyword overlap. Use it before writing any helper, parser, validator or domain function, even when you are sure it is new — grep can prove a name is absent but never that the behaviour is. A row whose only tie to the query is a word most functions share is counted in the response rather than ranked. To browse instead, use list_function_intents. For a set of functions you are about to write or have just written, and for a whole-project reuse audit, use find_similar.
Inputs: query (required), repo, top_k, offset, +4 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Codebase intelligence for AI agents — dead code, blast radius, ownership.
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Search indexed code, trace dependencies, assess change impact, and recall repository memory.
Related MCP Servers
- AlicenseAqualityCmaintenanceIndexes any TypeScript / React / Next.js repo into a queryable code graph and exposes 13 MCP tools — who-renders, who-calls, find-references, blast-radius, find-cycles, dead-code orphans, and local semantic search — so agents query structure instead of reading whole files. Built on ts-morph, so edges are resolved, not grepped.142MIT
- AlicenseNot gradedqualityCmaintenanceEnables cross-repository architecture discovery and dependency routing across multi-service codebases, with automated scanning and batch AST indexing for AI agents to trace request lifecycles and navigate service boundaries.6 npmMIT
- AlicenseAqualityBmaintenanceGives coding agents read-only tools that return, in one call, a declaration's callers traced up to entry points or its callees down to 8 levels, plus a map of directories, files, declarations and every usage of a symbol. Maps TypeScript, JavaScript, Go, Python and Java using each language's own compiler, so a change's impact can be traced across imports, methods, interfaces and decorators.4768 npm8Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server providing 29 tools across 5 layers for semantic TypeScript/JavaScript code intelligence, enabling AI agents to find references, trace impacts, guard APIs, and explain errors without text-search false positives.4 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.