Skip to main content
The Evermuse MCP server implements the MCP authorization specification. It is an OAuth 2.1 protected resource, and api.evermuse.com is both the resource server and the authorization server. Most MCP clients handle this flow automatically: you only see a browser sign-in and consent screen. API keys are also accepted for clients that can’t run OAuth. See API keys.

What you see when you connect

1

Sign in

Your client opens https://app.evermuse.com/oauth/authorize in your browser. The page shows which application is asking to connect. Sign in with Google, Microsoft or email. If you don’t have an Evermuse account yet, you can create one here.
2

Choose a workspace

If you belong to more than one workspace, choose the one the application should access. With exactly one workspace, it’s selected for you. If you have none, you can create one, and Evermuse walks you through a short setup including creating your first product.
3

Review and approve

The consent screen names the application, the workspace and the permissions it will receive. Click Allow access to approve or Deny to cancel. Denying returns you to the client with an access_denied error.If your workspace has third-party MCP servers connected to Evermuse, you’re asked instead whether to allow Evermuse access only or Evermuse + 3rd party access. Choose Evermuse access only: the MCP server doesn’t give OAuth connections access to third-party tools, so the second option adds nothing.
4

Back to your agent

Evermuse redirects you back to your client, which exchanges the authorization code for tokens. The first time an application connects to a workspace, Evermuse sends you a confirmation email.
An authorization is always bound to one workspace. The agent can never read or write data in any other workspace you belong to.

Scopes

If a client doesn’t send a scope parameter, Evermuse grants mcp:read mcp:write. That is the standard for Claude, ChatGPT, Cursor, Codex and other MCP clients. Scopes that weren’t part of the client’s registration are dropped.
mcp:write controls only the signal-writing tools. The other write tools, add_source, create_shaping_note and update_shaping_note, are available to every connection, including one granted only mcp:read.
Tools that write to your workspace are marked with readOnlyHint: false in their annotations, so your client can ask for confirmation before running them. See Tools reference for the full list.

Technical reference

This section is for developers building their own MCP client or reviewing the integration.

Discovery

A request to the MCP endpoint without credentials returns:
Both metadata documents are cacheable for one hour.

Endpoints

All endpoints are on https://api.evermuse.com.

Client registration

Evermuse supports three ways for a client to identify itself:
POST /oauth/register with a JSON body. redirect_uris is required. Every redirect URI must use https://, or http:// with a localhost or 127.0.0.1 host. Evermuse issues a public client (no secret).
The response is 201 Created with the registered metadata and a client_id. Registration is limited to 10 requests per hour per IP address.

Authorization code flow with PKCE

1

Authorize

Redirect the user to:
response_type, client_id, redirect_uri, code_challenge, code_challenge_method and state are required. Only S256 is accepted. The redirect_uri must exactly match one of the client’s registered URIs. scope is optional. Evermuse redirects to its consent page, and after approval back to redirect_uri with code and state. Authorization requests and codes expire after 10 minutes, and codes are single-use.
2

Exchange the code

3

Call the MCP server

Send the access token on every request:
4

Refresh

Each refresh returns a new refresh token. Store it and discard the old one.

Tokens

  • Tokens are opaque random strings, not JWTs. Evermuse stores only a SHA-256 hash of each token.
  • Refresh token rotation: every refresh issues a new refresh token and retires the old one. A retired refresh token presented again within 30 seconds (for example, a retried request) returns invalid_grant without side effects. Presented after that, it is treated as a replay: Evermuse revokes the entire token family, and the user must reconnect.
  • Tokens stop working automatically if the user leaves or is removed from the authorized workspace, or the account is deleted. Tool calls are refused at once. Other requests may keep succeeding for up to a minute while caches expire.
  • A 401 for an invalid or expired token doesn’t carry a WWW-Authenticate header. Clients should treat any 401 with error: "invalid_token" as a signal to refresh, and run the full flow again if the refresh fails.

Revoking access

The Evermuse app doesn’t yet have a page that lists connected applications. To end a connection:
  • From your AI client: disconnect or remove the Evermuse connector. Clients that revoke tokens on disconnect call /oauth/revoke. Otherwise the access token expires within an hour, and the refresh token expires after 30 days without use.
  • From the confirmation email: reply to the email Evermuse sent when the application first connected, and our team will revoke it.
  • By leaving the workspace: removing a user from a workspace invalidates all of their tokens for that workspace.
  • Programmatically: POST /oauth/revoke with a token parameter. Revoking a refresh token revokes its whole token family, including access tokens issued from it. The endpoint always returns 200 OK, as RFC 7009 requires.

OAuth errors

OAuth endpoints return errors as {"error": "...", "error_description": "..."}:

API keys

For server-to-server use, or clients that only support a static header, you can authenticate to the MCP server with a workspace API key instead of OAuth.
  1. In Evermuse, go to Settings → API Keys and click Create API Key. See Authentication for screenshots.
  2. Enable the mcp:read permission, and mcp:write if the agent should record or edit signals. MCP permissions require the key to have a default product.
  3. Click Generate and copy the key. It is shown only once.
  4. Send it in the x-api-key header:
An API key acts as the user who created it, in that key’s workspace. If a request carries both a bearer token and an API key, the bearer token wins. Keys are limited to 1,000 MCP requests per hour each. Revoke a key at any time from Settings → API Keys.
Treat API keys like passwords. Never put them in client-side code or commit them to source control. Prefer OAuth for personal use in AI assistants.