Docs / For agents
Enterprise-managed authorization
Claude, or your identity provider, gives your organization's members access to Graft's MCP server without a consent screen. Your identity source vouches for the person; Graft checks the assertion, checks that the person belongs to your Graft organization, and gives Claude an access token for one hour that reaches only your organization's copies.
What you need
- A Graft organization (the Team or Enterprise plan).
- An owner of that organization with two-factor sign-in (an authenticator app) set up. Only an owner can change these settings, and only after signing in with the authenticator code.
- Claude Team or Enterprise.
- For assertions from your identity provider: your organization's email domains, confirmed with Graft by email.
Set it up
Where it shows in Claude. Claude offers Managed authorization on Graft's directory connector only once Anthropic has marked Graft's listing as supporting it. If the Managed authorization row isn't there, that hasn't happened yet; write to support@graftfork.com. It works only with the client Claude's directory connector uses for Graft. Clients that register themselves, Claude Code among them, can't use it and connect through the consent screen.
- In Claude: open the Graft connector. In its Authentication section, click Set up on the Managed authorization row. Under Identity source, choose Claude-issued or IdP-managed. For Claude-issued, copy the Issuer URL.
- In Graft: the Team tab, Enterprise auth, signed in with your authenticator code. Paste the issuer, choose the scopes and the monthly cap, and turn it on. Graft fetches the issuer's discovery document and keys when you turn it on, so a mistyped issuer is refused there and then. These settings change only there: an API token can read them but not change them.
- For Claude-issued, copy the Tenant ID shown in Graft into Claude's "Tenant ID (optional)" field. Graft requires it: a Claude-issued assertion without it is refused. A Claude issuer URL isn't secret, so the Tenant ID is what ties Claude's assertions to your Graft organization.
- Back in Claude: Run test.
The issuer is compared exactly as you enter it, character for character, so paste it as Claude shows it. Claude-issued assertions are in beta at Anthropic.
Your identity provider (for example Okta)
If your identity provider issues the assertions itself, configure it with:
- Client id: the one shown in Graft's Enterprise auth settings.
- Audience:
https://graftfork.com - Resource:
https://graftfork.com/mcp - Signing algorithm: ES256 or RS256, with the keys in the JWKS your discovery document names.
Graft links each person's subject (sub) to their email the first time, and uses the link after that, so a later change of email at the identity provider doesn't move the access to someone else. That first sign-in needs an address on your organization's confirmed domains, so Graft needs your domains before you can turn on an identity provider's issuer.
Assertions from an identity provider carry no Tenant ID, so one identity provider's issuer can be turned on for only one Graft organization. If Graft says another organization already uses yours, write to support@graftfork.com.
Who gets in
- Active members of your Graft organization: people who completed Graft's sign-in at least once. An invited member who never signed in is refused.
- With just-in-time accounts on, people on your organization's confirmed email domains who have no Graft account yet: Graft makes them an account and adds them as a member, and the audit log says so. Your domains are set by Graft after you confirm them by email; just-in-time accounts can't be turned on without them. A just-in-time account has no authenticator, so signing in to the Graft website still needs the email link and setting one up.
Everyone else is refused, including a disabled account and an address outside your domains.
What the token can do
- Your organization's copies only. It can't connect new repositories or reach the person's own copies outside the organization.
- The scopes you chose: some of read, sync and resolve. Never pay, admin or audit.
- The monthly cap you set, counted across every token the same person gets in your organization that month.
- It lasts one hour. There is no refresh token: Claude asks your identity source again.
Removing access
- Remove the member in Graft: their next request is refused.
- Turn enterprise auth off, or change the issuer: every token it gave stops at once.
- Remove the user in Claude or your identity provider: no new tokens, but a token Graft already gave works until its hour is up.
Limits
- An assertion that lasts more than one hour (from
iattoexp) is refused. This is Graft's own limit; Claude's assertions last a minute. - ES256 and RS256 signatures only (RSA keys of 2048 bits or more). Unsigned assertions and every other algorithm are refused.
- Each assertion works once.
- Graft fetches the issuer's documents over https only, from a public host name, without following redirects.
Troubleshooting
A refused sign-in tells Claude only "The assertion was refused." so the answer can't be used to probe your setup. Graft keeps the reason: the Enterprise auth settings show the last refusal and when it happened, and the last sign-in that worked. A refusal is shown there only when the assertion's signature checked out, or when Graft couldn't fetch your issuer's documents, so a forged assertion can't write that line. For any other refusal, write to support@graftfork.com with the time of your test and we'll read it from Graft's log. Every change to the settings, and each person's first token in an hour, is in your organization's audit log.
A custom connector with a fixed header
If you add Graft to Claude as a custom connector with a fixed Authorization: Bearer header instead, use an organization's agent token. It identifies the organization, not a person: what it does is recorded as that agent, and it reaches only the organization's copies.
What Graft doesn't have
No SAML or OIDC sign-in to the Graft website. No SCIM provisioning. This page is about access to the MCP server only.