Cursor, VS Code and other clients
Any MCP client that supports Streamable HTTP with OAuth 2.1 (PKCE and dynamic client registration) can use the remote server. The client discovers everything from the URL: on the first request the server answers 401 with a WWW-Authenticate header that points to /.well-known/oauth-protected-resource, which names the Kanutus authorization server.
Cursor
In Cursor Settings → MCP → Add new MCP server, or in ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{
"mcpServers": {
"kanutus": { "url": "https://mcp.kanutus.com/mcp" }
}
}Cursor shows Needs login next to the server: click it to sign in to Kanutus.
VS Code (GitHub Copilot agent mode)
In .vscode/mcp.json, or with the MCP: Add Server command:
{
"servers": {
"kanutus": { "type": "http", "url": "https://mcp.kanutus.com/mcp" }
}
}Start the server from the file or the MCP list and accept the sign-in.
Claude Code
claude mcp add --transport http kanutus https://mcp.kanutus.com/mcpThen /mcp → kanutus → Authenticate. See Connect Claude.
Clients that only run local servers
Until the local package is published Soon, you can bridge the remote server with the community package mcp-remote, which handles the sign-in in your browser:
{
"mcpServers": {
"kanutus": { "command": "npx", "args": ["-y", "mcp-remote", "https://mcp.kanutus.com/mcp"] }
}
}Your own agent
If you are writing your own agent, in whatever framework you use (LangGraph, the OpenAI Agents SDK or your own code), you have two options:
- Use the MCP server with an OAuth token, like the clients above; or
The official MCP SDK in TypeScript connects like this (the SDK runs the OAuth flow through an authProvider):
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(new URL("https://mcp.kanutus.com/mcp"), { authProvider });
const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(transport);
console.log((await client.listTools()).tools.map((t) => t.name));
const balance = await client.callTool({ name: "get_balance", arguments: {} });