Claude Code, Cursor, VS Code, Codex, Gemini CLI¶
In short
- These clients run on your machine and speak MCP over HTTP, so a ParleML on
localhostworks directly. - Each needs the MCP address (
http://localhost:8000/mcpon a local install) and a token from Settings → Access (Connect your agent). - Settings → Access → Your own agent shows each configuration below with your address and token filled in. Copy it from there.
- Keep the token out of files a repository might commit. The examples read it from the
PARLEML_API_TOKENenvironment variable where the client supports that.
In the examples, replace <your-token> with the token you created, and http://localhost:8000
with your ParleML address if it differs.
Claude Code¶
-
Add ParleML as an MCP server. Run this once in a terminal (it works in bash and PowerShell):
claude mcp add --transport http parleml http://localhost:8000/mcp --header "Authorization: Bearer <your-token>"The server is added for the current folder only. To use ParleML in every project, add
--scope userafteradd:claude mcp add --scope user --transport http parleml http://localhost:8000/mcp --header "Authorization: Bearer <your-token>" -
Start Claude Code with
claudeand type/mcp.parlemlis listed as connected, with its tools. - Ask What workspaces do I have in ParleML?
claude mcp add keeps the token in your Claude Code settings, not in the project folder. To
change the token, run claude mcp remove parleml (with the same --scope), then add it again.
Claude Code also reads the ParleML skill packs directly. With both present, the skills use the MCP tools. The Claude Code tutorial walks through a first task.
Cursor¶
Put this in .cursor/mcp.json in the project, or in Cursor's global MCP settings. Cursor fills
${env:PARLEML_API_TOKEN} from your environment:
{
"mcpServers": {
"parleml": {
"url": "http://localhost:8000/mcp",
"headers": { "Authorization": "Bearer ${env:PARLEML_API_TOKEN}" }
}
}
}
Cursor also loads the skill pack from .cursor/skills/. Export it from Settings → Skill packs
with Export with APM (Skills & packaging).
VS Code (Copilot agent mode)¶
Put this in .vscode/mcp.json. VS Code uses a top-level servers object and "type": "http":
{
"servers": {
"parleml": {
"type": "http",
"url": "http://localhost:8000/mcp",
"headers": { "Authorization": "Bearer ${env:PARLEML_API_TOKEN}" }
}
}
}
Start VS Code from an environment that has the token, then start the server from the MCP configuration editor. The tools appear in the agent's tool picker. The VS Code MCP reference covers user-level configuration and secret inputs.
Codex¶
Put this in ~/.codex/config.toml. Codex reads the token from the environment variable that
bearer_token_env_var names, so the file holds no secret:
[mcp_servers.parleml]
url = "http://localhost:8000/mcp"
bearer_token_env_var = "PARLEML_API_TOKEN"
Gemini CLI¶
Put this in ~/.gemini/settings.json, or .gemini/settings.json in a project. httpUrl selects
streamable HTTP, and Gemini CLI fills ${PARLEML_API_TOKEN} from your environment:
{
"mcpServers": {
"parleml": {
"httpUrl": "http://localhost:8000/mcp",
"headers": { "Authorization": "Bearer ${PARLEML_API_TOKEN}" }
}
}
}
Type /mcp in the CLI to list the server and its tools. The skill pack is also a Gemini CLI
extension (Skills & packaging).
Set the token variable¶
For the clients that read PARLEML_API_TOKEN, set it before you start the client.
macOS / Linux:
export PARLEML_API_TOKEN=<your-token>
Windows (PowerShell):
$env:PARLEML_API_TOKEN = "<your-token>"
To keep it across sessions, put the line in your shell profile, or on Windows use System Properties → Environment Variables.
Local server (stdio)¶
Some clients only start local MCP servers. The MCP server can also run as a local process that the client starts and talks to over standard input and output (stdio). It still calls the running ParleML for every answer.
With ParleML running in Docker under the name parleml, the client starts the server inside the
container:
{
"mcpServers": {
"parleml": {
"command": "docker",
"args": ["exec", "-i", "-e", "PARLEML_API_TOKEN=<your-token>", "parleml", "python", "-m", "parleml_mcp.server"]
}
}
}
With sign-in off (open mode), you can leave out "-e", "PARLEML_API_TOKEN=<your-token>",. The
config holds the token, so keep the file private.
Details: stdio from a ParleML source checkout
From a checkout, run uv sync first, then point the client at it. Settings → Access → Your
own agent → Local (stdio) shows this entry with your address and token filled in:
{
"mcpServers": {
"parleml": {
"command": "uv",
"args": ["run", "--directory", "/path/to/parleml", "python", "-m", "parleml_mcp.server"],
"env": { "PARLEML_API_BASE": "http://localhost:8000", "PARLEML_API_TOKEN": "<your-token>" }
}
}
}
Replace /path/to/parleml with the absolute checkout path. On Windows use forward slashes,
such as C:/src/parleml, or escape the backslashes.
Deep links in local dev¶
Tool results carry ui_url links into the ParleML app. In the Docker image the app and /mcp
share one origin, so the links work with no setup.
In local development they don't: the app runs on Vite at http://localhost:5173, while
http://localhost:8000 serves the API and /mcp but no pages. Point the links at the app with
PARLEML_PUBLIC_URL:
-
Hosted
/mcp: set it in the backend's environment before you start the backend.$env:PARLEML_PUBLIC_URL = "http://localhost:5173" uv run uvicorn app.main:app --reload --app-dir backend --timeout-keep-alive 75 -
Stdio: add
"PARLEML_PUBLIC_URL": "http://localhost:5173"to the server entry'senv.
It must be an absolute http(s) URL, or the server refuses to start. It moves only the links:
OAuth discovery stays on the backend, whose issuer is PARLEML_OAUTH_ISSUER when set, else the
origin the client called.
Next¶
- Tokens & scopes: what each scope allows.
- Tool catalog: every tool your agent can call.