Skip to content

Docs · MCP server

Connect Grace to your editor.

Grace runs as a remote MCP server. Paste one address into Claude Code, Cursor or the Claude app, sign in, and your assistant can ask Grace what this project already decided, what a change touches, and whether it is safe to commit.

Server address

https://api.agent-grace.com/mcp

Transport
Streamable HTTP
Sign-in
OAuth, with your Grace account
Install
Nothing. A Claude Code plugin adds the guardian.
Model
Yours. Grace never writes code.
On this page

How it works

Your assistant is good at writing code and knows nothing about what your team decided last quarter, what broke twice in that file, or what a change here breaks over there. Grace is that knowledge: the rules, the context and this project's memory. Your assistant's model does the reading and the writing. Grace never writes code, and from your editor it never runs a model of its own unless you ask it to.

  1. 01Plan

    Before anything is written, Grace returns a numbered procedure sized to the job, with the roles to run and what this project already knows.

    grace_plan_feature

  2. 02Think

    What the team decided, what the change touches elsewhere, and the questions a senior asks before touching a data model, authentication or an API.

    grace_recallgrace_impactgrace_check_situation

  3. 03Write

    Your assistant writes the code, on your own model and subscription. Grace stays out of the way.

  4. 04Check

    Before the commit, your assistant reviews its own change with Grace's brief. Grace keeps only what is new and opens the commit gate.

    grace_review_briefgrace_review_submit

  5. 05Remember

    What you say that the code does not becomes a note in the repository, so the next person does not undo it.

    grace_remember

The check before the commit is the step that matters. The code is written in your editor, so Grace never sees it go by: the review on the way out is the safety net. You never type a tool name. You talk to your assistant as usual, and the server tells it when to ask.

Before you start

  • A Grace account. The one you use at app.agent-grace.com. Signing in from your editor uses the same login, Google or GitHub included.
  • An editor that speaks MCP over HTTP with OAuth. Claude Code, Cursor and the Claude app all do.
  • For impact maps and reviews, a copy of the code. Recalling decisions, writing them down and getting a fix plan work straight away. Tracing what a change touches and checking a change need the app connected to its repository and audited once. Your assistant can do both from the editor, in your first session.

Connect your editor

One address for every editor. Nothing to download, no key to copy: the sign-in opens in your browser.

Server address
https://api.agent-grace.com/mcp

Claude Code, with the guardianRecommended

The Grace Guardian plugin connects the server and adds the hooks that let Grace speak up on its own: before an edit, before a commit, before your assistant finishes. It brings its own connection, so this is the whole setup. In Claude Code:

Claude Code
/plugin marketplace add Beyond-The-Brackets/grace-guardian
/plugin install grace-guardian@grace

Then quit and reopen Claude Code, run /mcp, pick grace and sign in when your browser opens.

No /plugin command where you work, for example in the Code tab of the Claude desktop app? Paste this to your assistant instead. It merges two keys into ~/.claude/settings.json itself, keeping everything already in the file:

Paste into Claude Code
Set up Grace on this project. Do all of it yourself, and do not assume I have the `claude` command on my PATH.

1. Open ~/.claude/settings.json (create it as {} if it is not there). Parse it, keep everything already in it, and merge in these two entries, then write it back. Do not replace the file:

{
  "extraKnownMarketplaces": {
    "grace": {
      "source": {
        "source": "github",
        "repo": "Beyond-The-Brackets/grace-guardian"
      }
    }
  },
  "enabledPlugins": {
    "grace-guardian@grace": true
  }
}

2. Tell me to quit and reopen Claude Code, then run /mcp and sign in to grace with my Grace account.

3. When I come back after that, connect this repository to Grace and tell me what Grace already knows about it.

Those two keys, for anyone who would rather edit the file by hand. Merge them; never replace the file with them alone.

~/.claude/settings.json
{
  "extraKnownMarketplaces": {
    "grace": {
      "source": {
        "source": "github",
        "repo": "Beyond-The-Brackets/grace-guardian"
      }
    }
  },
  "enabledPlugins": {
    "grace-guardian@grace": true
  }
}

If /mcp then lists two grace servers, you had added one by hand before. Remove that one with claude mcp remove grace: the plugin brings its own.

Claude Code, tools only

Every tool, without the hooks. Grace answers when your assistant calls it, and says once a day that the guardian is not installed.

Terminal
claude mcp add --transport http grace https://api.agent-grace.com/mcp

Then /mcp, pick grace and sign in. To share it with your team, check it into the repository instead:

.mcp.json
{
  "mcpServers": {
    "grace": {
      "type": "http",
      "url": "https://api.agent-grace.com/mcp"
    }
  }
}

Cursor

  1. 1.Open Cursor Settings, go to the MCP section and add a new server.
  2. 2.Choose the HTTP type and paste the server address as the URL.
  3. 3.Sign in when your browser opens.

Or declare it in .cursor/mcp.json for one project, or ~/.cursor/mcp.json for all of them:

.cursor/mcp.json
{
  "mcpServers": {
    "grace": {
      "url": "https://api.agent-grace.com/mcp"
    }
  }
}

Cursor gets every tool. The guardian that steps in on its own runs in Claude Code only, for now: in Cursor, ask your assistant for a review with Grace before you commit.

Claude app and claude.ai

  1. 1.Open Settings, then Connectors, then Add custom connector.
  2. 2.Name it Grace and paste the server address as the URL. Leave the advanced settings empty and click Add.
  3. 3.Click Connect. The Grace sign-in page opens.

Custom connectors need a Claude Pro, Max, Team or Enterprise plan. Grace answers when you ask it to; the guardian lives in Claude Code.

Other clients

Any client that speaks MCP over Streamable HTTP with OAuth works. Give it the server address and it discovers the rest: an unauthenticated request gets a 401 whose WWW-Authenticate header points at the server's protected-resource metadata (RFC 9728), and the client takes the sign-in from there.

CI and scripts

An editor never needs a key. Keys exist for places that cannot open a browser to sign in, such as a CI job or a script, and are created in the Grace app on the Connect Grace page. A key is shown once, opens the whole account, can never create another key, and stops working the moment it is revoked. Keep the file that holds it out of Git. To wire one into your pipeline, write to hello@agent-grace.com.

Grace is not published on npm. Nothing you install with npx is Grace, whatever it is called, so never hand a Grace key to one.

Check the connection

Open your project and ask your assistant:

What does Grace know about this project?

It answers with the app it matched and what Grace holds on it. The Connect Grace page in the Grace app turns green the first time Grace hears from your editor, and from then on shows when it last did.

If Grace cannot tell which app the folder is, it lists your apps and asks rather than guessing. A wrong guess would feed your assistant another project's conventions, and nothing in the answer would give it away. Connecting the folder settles it: see the first step below.

Your first session

What to say, in your own words, and what happens behind it.

  1. 01“Connect this repository to Grace.”

    Your assistant reads the Git remote and calls grace_connect_repo. A folder with no remote goes to grace_connect_local instead. Calling either twice is safe.

  2. 02“Audit this codebase with Grace.”

    Grace runs its analysers and hands your assistant a work order. Your assistant reads the code on your machine, then sends its findings back with grace_audit_submit. Grace checks them, scores the app and writes its memory. Expect a few minutes of reading.

  3. 03“What should we fix first?”

    grace_health returns the last audit in plain language, then grace_verify_findings checks each point against your current commit before anything is repeated to you.

  4. 04“Add a billing page.”

    From here on, work as usual. Grace plans the change, recalls what the project decided, and asks for a review before the commit.

The guardian

Connected as a plain server, Grace is a tool your assistant may call. With the Claude Code plugin, it is consulted at each of these moments whether the assistant thinks of it or not.

Session starts
How the project stands, the areas that break, the debt that is there on purpose.
You send a prompt
Pushes back on the request itself before work starts, then adds what the team already decided about it, including approaches tried and rejected.
You leave plan mode
Reads the plan against the project: the settled decisions it crosses, the open issues in its files, how an irreversible step is undone, how anyone will know it worked.
Before a file is written
Refuses a credential about to land in code. Asks before an edit in a fragile area, a lockfile or an env file. Recalls what the project remembers about that file.
After a file is written
Reads it on the spot. A swallowed error, a muted test, a silenced type check, a second copy of a helper: said within the second, not at the end of the turn.
Before a shell command
Refuses git commit and git push while changed files are unreviewed. Asks before anything hard to undo: push --force, rm -rf, prisma migrate reset, curl … | sh.
Before the assistant finishes
Asks once for a review of what changed. Your assistant reviews with its own model; Grace scores what is new.

The checks on files, commands and commits are rules, not a model: they cost nothing and answer within a few seconds. Grace speaks only when it knows something about this project that the file does not show. It does not repeat what any competent engineer already knows.

Strictness

A team setting, changed by an owner or an admin on the Connect Grace page of the Grace app.

Advise

Grace only adds context. It never blocks and never asks.

GuardDefault

Refuses a certain secret and an unreviewed commit. Asks before a fragile area, an env file or a generated file. Advises everywhere else.

Strict

Also refuses edits in fragile areas until the assistant has recalled what the project remembers, and refuses destructive commands outright.

When Grace cannot be reached

The plugin fails closed. When Grace is unreachable, an edit is refused rather than let through unchecked, because “not checked” must never look like “nothing to report”. At session start a small check says whether Grace is reachable. To carry on knowingly while it is down, start Claude Code with GRACE_GUARD_FAIL_OPEN=1.

Turning it off

/plugin uninstall grace-guardian removes it. To silence it in one repository only, set "disableAllHooks": true in that repository's .claude/settings.local.json.

Tool reference

The server exposes 31 tools. Your assistant picks them from their descriptions, which say when to call each one; you never need to name them. They are listed here so you know what it can ask, and can recognise them in your editor's logs.

Connect

Which account, which app, and the one-time setup.

grace_apps

Read-only

First, or whenever another tool says it cannot tell which app this is.

The Grace account this connection opens and its apps. Flags an app Grace has never audited, since nothing can be traced there yet.

grace_connect_repo

Records in Grace

The repository you are in is not in Grace yet.

Connects it from the editor, with no browser and no wizard. Grace checks it can read the repository before creating anything. A second call returns the app it already has.

Inputsreponame

grace_connect_local

Records in Grace

The folder has no Git remote.

Registers the folder from metadata alone: a name, the stack, a sentence on what it does. Grace receives no code and not the path. Audits then run from the editor; auditing from the web app, impact maps and scheduled checks wait for a repository, and say so.

Inputsnamestackbrief

Grace says its guardian hooks are not installed.

The two settings keys that install the Claude Code plugin, and what to tell you. Your assistant asks before touching your settings file.

grace_guard_bind

Records in Grace

The guardian says it cannot tell which app this folder is.

Binds the folder to an app, once. From then on the guardian challenges edits there with the right project's memory.

Inputscwdapp

Plan and think

Before a line is written.

Before any change: a feature, a fix, an update, a refactor.

A numbered procedure sized to the job. A contained change gets a lead developer and a guardian; a whole feature gets product, lead developer, the specialists it calls for, then the guardian. Each step carries its rules and this project's context, and your assistant announces each one as it runs it.

Inputsintentpathsobserved

Your assistant takes on one role on its own, or picks a procedure back up halfway.

The rules of one role (pm, lead_dev, security, data, guardian), written to be followed directly or passed to a subagent as its instructions. A version your team trained in the Grace app comes first.

Inputsrole

grace_recall

Read-only

Before proposing a change, and before cleaning anything up.

What the team decided, the conventions the code follows, the areas that break often and the debt that is there on purpose. Team decisions are kept apart from what Grace derived from the history, because the two do not carry the same weight.

Inputspathsquery

grace_impact

Read-only

Before writing a change that crosses files.

What else has to change with it, what is worth checking, what usually moves at the same time, and how far to trust the map. An incomplete map is never presented as "nothing else is affected". Needs an audited repository.

Inputsintentionpaths

Before touching a data model, authentication, permissions or an API.

The questions a senior asks in that situation, made concrete by what this project knows: the decisions on those files, the open issues, what depends on them. Answers silent when it knows nothing specific, which is an honest answer and not a pass.

Inputstextpathscode

Review

After writing, before committing.

grace_review_brief

Records in Grace

Before a commit, or when the guardian asks for a review.

A work order for your assistant to review its own change: who depends on what changed, what the project decided about those files, the issues already known there. Your assistant sends a diff and a SHA-256 fingerprint per file, never the whole file; Grace rebuilds it from its own copy and checks the fingerprint, so a three-line edit costs three lines.

Inputsfilessessionintention

grace_review_submit

Records in Grace

Your assistant has worked through a review brief.

Its findings, possibly none. Grace keeps only what the change introduces, writes it in plain language, records the review and opens the commit gate for those files.

InputsreviewIdfindingsreadPaths

grace_review

Read-only

You would rather Grace's own model read the change.

The same review, run on Grace's servers. Your assistant passes the full content of the changed files, up to 40. Available on accounts that include Grace's own model; everywhere else, use the brief.

Inputsfilesintention

Audit

Grace's full read of the codebase, done by your model.

grace_audit_brief · also grace_audit_run

Read-only

Grace has never read this code, or its last audit is old.

Grace runs its analysers and computes hotspots from the real Git history, then hands your assistant a work order: the leads to confirm or reject, the files to read first, and the auditor your account trained in Grace. Your assistant maps the whole system, reads each of the 14 dimensions (one subagent per dimension), and merges the results. Preparing the work order takes a couple of minutes.

InputsappauditId

grace_audit_submit

Records in Grace

The reading is done.

The findings become a Grace audit: checked against Grace's own signals, security issues re-rated, twelve axes scored, the project's memory written. A lead in a file your assistant opened and did not confirm is dropped; one in a file nobody opened stays.

InputsauditIdfindingsreadPaths

To know whether an audit is running, and how old the last one is.

A running audit is not a result: nothing it has produced so far is a verdict.

Inputsapp

grace_health

Read-only

Anytime.

Where the app stood at its last audit, in plain language: what to fix first, who it affects, how urgent. A dated snapshot, not a scan of your current code.

Inputsapp

grace_verify_findings

Records in Grace

Right after grace_health or grace_fix_brief, before anything is repeated or fixed.

An audit records a date, not a commit. Your assistant sends HEAD, Grace names the few places that moved, and your assistant opens them and reports still-present or appears-fixed. Closing a finding requires quoting what is there now.

InputsheadShachangedPathsverdicts

Fix

Grace brings the plan. Your assistant writes the code.

One issue to fix.

Where to start, the procedure for that kind of problem, what this project's history says must not break, what else has to change, and how to know it worked.

InputsfindingIdissuepaths

You ask to fix everything Grace found.

Every open finding, grouped by cause (the same problem in twenty files is one fix), ordered by severity, and split into waves in which no two groups touch the same file, so parallel work never collides. Each group carries its procedure, its constraints and what its QA must prove.

Inputsapp

grace_fix_submit

Records in Grace

Your assistant has worked through a fix brief.

One entry per group, skipped ones included. Grace closes a finding only when its group is reported fixed, its QA ran and came back green, and the file it points at is among the files changed. Anything else stays open, with the reason.

InputsfixIdgroupsbranchpullRequestUrl

Ship and remember

Before a deploy, and after a decision.

Before any deploy, or when someone asks "can we ship?".

A plain-language verdict from the last audit and the project's memory: secrets, exposure, dependencies, reversible migrations, data, configuration, the areas this project already broke in. A never-audited app is unknown, not fine. Grace only says ready when its last audit read the commit you pass.

InputsheadSha

grace_remember

Records in Grace

You tell your assistant something the code does not say.

Records a decision, a convention, a fragile area, deliberate debt, an incident or an approach tried and rejected, and returns a markdown note for your assistant to write under .grace/memory/.

Inputstypesummarywhypaths

Guardian hooks

Called by the Claude Code plugin at each moment of a session. Nobody calls them by hand; they show up in `/mcp` all the same.

grace_guard_session
Session starts
grace_guard_prompt
You send a prompt
grace_guard_plan
You leave plan mode
grace_guard_write
Before a file is written
grace_guard_after_write
After a file is written
grace_guard_command
Before a shell command
grace_guard_stop
Before the assistant finishes

Project memory

What your team knows and the code does not say, kept in the repository where everyone can read it.

When you tell your assistant something worth keeping, grace_remember records it in Grace and returns a markdown note for your assistant to write under .grace/memory/. Plain files with frontmatter and [[wikilinks]]: readable in your editor, in code review on GitHub, and by anyone who clones the repository. Commit them. That is how the memory becomes the team's and not just yours.

decision
What was chosen, and why.
convention
How the code here is written.
sensitive_zone
An area that breaks often.
accepted_debt
A shortcut that is there on purpose.
incident
Something that went wrong, and what it taught.
rejected_approach
What was tried and dropped, so nobody tries it again blind.
.grace/memory/the-invoice-export-is-synchronous-on-purpose.md
---
type: accepted_debt
summary: "The invoice export is synchronous on purpose"
source: human
createdAt: 2026-09-01T10:00:00.000Z
refs:
  - "src/billing/export.ts"
---

# The invoice export is synchronous on purpose

We tried a queue. The ops burden was not worth it for 40 invoices a month.

Notes are append-only. One that turns out to be wrong is closed, not rewritten: the reasoning behind a past decision is exactly what stops someone making the same mistake again.

What Grace sees

Grace reads the repository, not your machine.
A connected app is read through its GitHub connection. Grace has no access to your disk: anything else comes from your assistant, which decides what to send.
Reviews send the change, not the files.
A diff and a fingerprint per file. Grace rebuilds the file from its own copy of the repository and refuses to review bytes that do not match.
The guardian sees the moment.
With the Claude Code plugin, each prompt, plan, edit and shell command passes through Grace as it happens, with the folder it happens in. That is how a credential is refused before it lands.
Secrets stay put.
Grace refuses .env files, lockfiles, binaries, node_modules and build output even if they are sent, and the review names what it left out.
The account comes from the sign-in.
Identity is read from the OAuth token, never from a tool argument, so neither an assistant nor a prompt injection can switch accounts by asking.
A local app sends no code.
grace_connect_local registers a name, a stack and a sentence. That app's audits run on your machine: your assistant reads, Grace scores.

The guarantees that hold beyond the editor, from pull requests you approve to how each account is isolated, are on Trust & Control.

Behaviour worth knowing

Silence is never approval.
"Unavailable", "never audited" and a timeout all mean not checked, and Grace says so. It does not stay quiet in a way that reads as "all good".
Long jobs hand back an id.
Editors cut a tool call at 60 seconds, so anything slower (an audit brief, an impact map, a review) answers within about 25 seconds with an id. Your assistant calls the same tool again with that id; starting a second job would redo the work.
Findings are dated, not tied to a commit.
The code may have moved since the last audit. grace_verify_findings checks each point against HEAD before it is repeated to you.
A review is a change, not a codebase.
grace_review takes up to 40 files. Beyond that it is an audit.
A loop gets paused.
When an editor sends more requests in five minutes than a person could, Grace pauses and says so. The guardian's hooks have their own, larger budget, so a review is never blocked by them.

Troubleshooting

Grace says it does not know this folder.
Ask your assistant to connect it. A GitHub repository goes to grace_connect_repo, a folder with no remote to grace_connect_local. If the app already exists and only the guardian is unsure, grace_guard_bind settles it once.
The guardian went quiet.
Hooks cannot renew an expired sign-in, and a dead connection fails silently in Claude Code. Run /mcp, pick grace and reconnect. The Connect Grace page in the app shows when Grace last heard from each member of your team.
Edits are refused with "Grace guardian is unreachable".
The plugin fails closed: an edit it cannot check is refused rather than let through unchecked. Reconnect with /mcp. To carry on knowingly while Grace is down, start Claude Code with GRACE_GUARD_FAIL_OPEN=1.
/mcp lists two grace servers.
You added one by hand before installing the plugin, which brings its own. Remove the manual one: claude mcp remove grace.
Impact maps and reviews say they cannot trace anything.
Grace needs a copy of the code first: the app connected to its repository and audited once. Ask your assistant to audit it with Grace.
The Claude app has no Add custom connector button.
Custom connectors need a Claude Pro, Max, Team or Enterprise plan.
Under --dangerously-skip-permissions, nothing asks me anything.
Nobody is there to answer an "ask", so Grace says so in context. In Strict mode those become refusals.

Still stuck? Write to hello@agent-grace.com with what your editor printed.

Rather see it on your own code first?

Book a call and connect your app beforehand. We'll open the call on your own report.

Book a call

15 minutes with the team behind Grace