Modulify

Connect a client

Create an access token and point Claude Code, Claude Desktop or Cursor at Modulify.

On this page

Connecting takes two things: a token you create in Modulify, and one line of configuration in your AI client. The same token works in every client, and every client points at the same server URL.

Before you begin

You need a Modulify account and a client that speaks MCP over HTTP. Claude Code, Claude Desktop and Cursor all do, as does anything else that reads an mcp.json style config.

Create a token

Open the user menu in the dashboard and choose Tokens, at /dashboard/tokens. The page is titled Tokens and explains itself: "Connect Claude, Cursor or any MCP client to Modulify. Each token acts as you, so grant only what it needs."

Click Create token. The form asks for four things:

  1. Token name. Name it after the client you are handing it to, so you know which one to revoke later. The placeholder suggests "Claude Code on my laptop". Up to 60 characters, and it is required.
  2. Expires after. 30, 90, 180 or 365 days. It defaults to 90 days and cannot be changed once the token is issued.
  3. Which workspaces it can reach. This section only appears when you are a member of more than one workspace. The default is "Every workspace I am a member of". Tick individual workspaces to narrow the token to those.
  4. What this token can do. The scope checkboxes. Eleven of the fourteen are ticked for you. The three left unticked are the ones behind deleting and rewriting things. Tokens and scopes explains each.

Click Create token. At least one scope must be ticked, or the form refuses with "Permissions required".

Copy the token immediately

The new token appears once, in an amber panel headed Copy this token now: "This is the only time it is shown. If you lose it, revoke the token and create another one."

Copy it with the copy button. The token starts with mdf_mcp_, and after you copy it Modulify clears it from your clipboard again a minute later, so paste it into your client straight away. Click I have copied it to dismiss the panel.

The token list afterwards shows only the last six characters. There is no way to read the full value back.

Connect Claude Code

Run this in your terminal, with the token you copied in place of YOUR_TOKEN:

claude mcp add --transport http modulify https://api.modulify.ai/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"

Connect a client that reads a config file

Claude Desktop, Cursor and anything else with a JSON MCP config take the same server with the same header:

{
  "mcpServers": {
    "modulify": {
      "type": "http",
      "url": "https://api.modulify.ai/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  }
}

The server is plain HTTP, so there is nothing to install and no local process to keep running.

Check the connection

Ask the client to list your Modulify workspaces. That calls list_workspaces, which needs nothing but the token and returns the name, plan and your role in each workspace. Almost every other tool needs a workspaceId or a site from one of them, so it is the natural first call.

From there, ask it to list the sites in one of those workspaces. That is list_sites, and the site ids it returns are what the rest of the catalog takes.

If the client cannot connect

Modulify answers an unauthenticated request with a 401 and one of three descriptions, which name the problem exactly:

What you see What it means
A Modulify access token is required. No Authorization header arrived. Check the header is spelled Authorization: Bearer <token>.
This access token is invalid, revoked or expired. The value does not match a live token. Check you pasted the whole thing, including the mdf_mcp_ prefix.
This access token has expired. The token passed its expiry date. Create a new one; expiry cannot be extended.

If the client connects but a tool you expected is missing, the token does not hold that tool's scope. Tools are registered per token, so a missing scope means the tool is absent from the list rather than failing when called. Edit the token on the Tokens page and tick the scope, then reconnect the client.

If a call is refused with "This key is limited to specific workspaces", the token was narrowed at creation to workspaces that do not include the one you aimed at. If it is refused with a message about API access, your role in that workspace does not hold the API access permission and a workspace owner has to grant it.

Next