Composway Docs

Connect your assistant

Add the Composway MCP server to Claude Code, Claude, Cursor, VS Code, Codex, Zed, ChatGPT or any other MCP client.

Everything below uses one URL:

https://mcp.composway.ai/mcp

It speaks Streamable HTTP and authenticates with OAuth 2.1. Your client opens a browser window the first time it connects; sign in with your Composway account and approve the connection. There is no API key, and nothing to paste into a config file beyond the URL.

You need a Composway account first

The server acts as you. If you do not have an account yet, sign up at Composway and create a workspace before connecting - an assistant with no workspace can read very little.

Otherwise, find your client below. They differ only in which file the URL goes in.

Claude apps

In the Claude desktop or web app:

Open Settings → Connectors.
Choose Add custom connector and paste the server URL.
Sign in to Composway in the window that opens.

For users under Claude Team or Enterprise licenses, an organization Owner adds the connector first under Organization Settings → Connectors, and members then connect individually - a member cannot add it alone.

ChatGPT

Turn on Developer mode under Settings → Apps.
Create an app named Composway and paste the URL.
Choose OAuth, sign in, and enable Composway.

Claude Code

Install the plugin. It sets up the connection and adds skills that drive the tools - how to triage a site, which read settles which finding, what each class of traffic loss means:

claude mcp add --transport http --scope user composway https://mcp.composway.ai/mcp

Then run /mcp to sign in. Use --scope project instead to commit the server to .mcp.json and share it with everyone on the repository:

.mcp.json
{
	"mcpServers": {
		"composway": {
			"type": "http",
			"url": "https://mcp.composway.ai/mcp"
		}
	}
}

Codex

Add the server, then sign in:

codex mcp add composway --url https://mcp.composway.ai/mcp
codex mcp login composway

codex mcp login is a separate step, and it is the one people miss - without it the server is configured but unauthenticated, and every tool call fails. The equivalent by hand:

~/.codex/config.toml
[mcp_servers.composway]
url = "https://mcp.composway.ai/mcp"

Use .codex/config.toml in a trusted project to scope it there.

Cursor

Use this Add to Cursor link, or write it yourself:

~/.cursor/mcp.json
{
	"mcpServers": {
		"composway": {
			"type": "http",
			"url": "https://mcp.composway.ai/mcp"
		}
	}
}

Reload Cursor, then sign in when the browser opens. Use .cursor/mcp.json inside a project to scope it to that project instead.

Zed

settings.json
{
	"context_servers": {
		"composway": {
			"url": "https://mcp.composway.ai/mcp"
		}
	}
}

Leave out any headers - with no Authorization header configured, Zed runs the standard MCP OAuth flow and prompts you to sign in.

Any other MCP client

Point it at the URL as a remote Streamable HTTP server and let it run its OAuth flow. Clients differ in what they call this - "custom connector", "remote MCP server", "add server by URL" - but the inputs are the same, and none of them need anything from you beyond the URL.

If a client still speaks only stdio, bridge it with mcp-remote:

{
	"mcpServers": {
		"composway": {
			"command": "npx",
			"args": ["-y", "mcp-remote", "https://mcp.composway.ai/mcp"]
		}
	}
}

Check that it worked

Ask your assistant to call get_server_status. A healthy connection returns the server version, the current tools schema version, and your signed-in identity. If it reports you as unauthenticated, the OAuth flow did not complete - reconnect.

Then ask it to call list_workspaces. That is the id you will need for nearly everything else.

Start each session with get_server_status

The tool surface changes as the product does. get_server_status reports a schemaVersion; when it differs from what your client cached, the client should re-run tool discovery. Well-behaved clients do this on their own - the server also emits a tools/list_changed notification - but a long-lived session that skips it can end up calling a tool with a stale schema.