TypeScript codebase intelligence for AI agents and IDEs, across every service and repo.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Carrick maps your entire TypeScript codebase across services and repositories, giving AI agents full context on existing types, routes, and function behaviours over MCP before they write duplicate or breaking code.
Carrick scans TypeScript projects using npm, pnpm, Yarn, Bun, or Deno. Deno projects require Deno 2.9.4 or newer; the Action supplies the runtime and reads existing
deno.jsonordeno.jsoncmanifests. Dependency preparation disables lifecycle scripts (details). Cross-repo features need at least two services indexed in the same Carrick project; a single-service install still gets same-repo validation.
Get started: sign up at app.carrick.tools Β· full documentation at docs.carrick.tools
Connect Claude Code, Cursor, Windsurf, or Codex to the Carrick MCP endpoint. Carrick answers semantic questions about your org that an agent normally has to grep across repos to answer, badly:
/api/users and what response shape do they expect?"These work because the index combines structural facts, resolved types, and a per-function description of what the code actually does.
For every scanned function in every repo in your org, Carrick stores three layers:
The intent layer is the difference. It is what lets an agent answer "where do we deduplicate users by email" rather than "which functions are named dedupeUser."
The MCP endpoint lives at https://api.carrick.tools/mcp.
The recommended authentication is sign-in-with-Carrick: your agent opens a browser, you click Approve once, and no API key changes hands. A manual key paste is available as a fallback. To get started, sign up at app.carrick.tools β the full setup guide lives at docs.carrick.tools.
The index is populated by running the Carrick GitHub Action on each TypeScript repo you want indexed. On the main branch the action refreshes that repo's contribution to the index. On pull requests the Carrick App posts a drift comment for you (no extra workflow steps required).
No secrets required. The id-token: write permission lets the action mint a short-lived GitHub Actions OIDC token, which Carrick uses to verify the repo's identity and authorize the upload. On pull requests the Carrick App posts the drift comment itself, so the workflow needs no extra permissions and no comment-posting step. Just make sure the Carrick GitHub App is installed on the org and the repo is connected to a project in the dashboard.
Pull requests opened from forks are skipped gracefully: GitHub withholds OIDC credentials from fork runs, so the action prints a notice and exits successfully instead of failing the check. The scan runs when a maintainer pushes the branch to the repository itself.
Package types need their dependencies on disk. Node projects use installed node_modules, and Deno projects use the Deno dependency cache. The Action prepares those dependencies before analysis:
package-lock.json runs npm ci, pnpm-lock.yaml runs pnpm install --frozen-lockfile, yarn.lock runs yarn install, bun.lock/bun.lockb runs bun install.node_modules skips that service's Node install. A Deno manifest still triggers Deno cache preparation, which the separate Deno cache does not get from a Node install.For Deno roots the Action runs deno install --frozen --node-modules-dir=none.
This prepares the Deno dependency cache and prevents npm lifecycle scripts from
running even when the project authorizes them through allowScripts. A root
with both Node and Deno configuration prepares both dependency stores. Before
local indexing, install Deno 2.9.4 or newer and run the same preparation command
from the Deno workspace root. Projects that import generated declarations must
generate those declarations through their normal build before indexing.
Carrick refuses to scan a checkout it cannot type, rather than charging for an
index whose types are any and saying nothing about why. The check runs before
the scan starts, per service, on what is reachable from that service's own
directory β a monorepo root that is installed says nothing about a nested
workspace that is not. Two things are refused:
nodeModulesDir, since Deno otherwise caches outside the tree.paths entry, a package.json
imports key or a Deno import-map entry pointing at, say, a generated client
whose generator has not run. The refusal names the mapping and the missing
directory and stops there: nothing in the config says what fills a generated
directory. A mapping left behind by a deleted package, that nothing imports,
is logged and scanned past β no type can be any through a mapping no import
uses.Both are proxies, so there is always a way past: --allow-unprepared on the
command, CARRICK_ALLOW_UNPREPARED=1 in the environment, or
allow-unprepared: true on the Action (which install-dependencies: false
already implies). A pipeline that scans a bare checkout deliberately keeps
working; it just says so.
Deno services normally omit tsconfig and use their nearest Deno manifest.
An explicit ordinary TypeScript config selects the TypeScript path. An explicit
Deno config must name that nearest manifest; deno.json takes precedence over
deno.jsonc when both exist. Import maps must be local files.
Turn it off with:
Private registries use your own credentials. Carrick adds no auth of its own: put the token your .npmrc reads in the job's environment and the install step inherits it.
A scan reads the model once per changed file and reuses what it already has for
the rest, which is what makes a routine scan cheap. Occasionally the answers
themselves need redoing rather than the files: Carrick starts extracting
something it did not extract before, and the cache holds answers from before it
could. full-scan re-analyzes every file for one run.
Ask for it, rather than leaving it on. Wire it to the workflow's
workflow_dispatch input, which is what carrick init scaffolds:
Then run it from the Actions tab, or:
On every other trigger the expression is empty and the incremental scan runs exactly as before.
An ordinary scan indexes a commit once per scanner version, so a second run on an unchanged commit stores nothing and says so. A full scan is the exception: its answers replace what the index holds for that commit, because re-analyzing everything is a statement that the stored answers were the stale part.
The MCP endpoint exposes the index as structured tools your agent can call directly.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/carrick)<a href="https://allmcps.com/mcp/carrick"><img src="https://allmcps.com/api/badge/carrick?style=directory" alt="Carrick on AllMCPs" /></a>