Connect a client
Add the Telflo MCP server to Claude Code, claude.ai, Cursor, VS Code, or another MCP client, and sign in as yourself or with a service-account token.
Every MCP client connects to the same hosted server and either signs you in through your browser or sends an API token from a service account. Two ways to sign in compares the two.
Server URL
https://mcp.telflo.com/mcpThe server uses Streamable HTTP; when a client asks for a transport or type, choose http. The URL is the same for every organization: the credential the client sends decides who the agent acts as. A token also fixes the organization; a sign-in picks one per call. A client that runs only local stdio servers needs a bridge to this URL, such as the community mcp-remote package.
Set up your client
Each tab shows the browser sign-in, then a service-account token where the client can send one, following the client's own documentation as of October 2026. Configure one or the other: with a token configured, Claude Code and Codex CLI do not fall back to the browser sign-in. Most token examples read the value from TELFLO_API_TOKEN, the variable the CLI uses, so it stays out of the configuration file.
Sign in as yourself
claude mcp add --transport http telflo https://mcp.telflo.com/mcpAdd --scope user for every project, or --scope project to share it through .mcp.json. Start claude, run /mcp, select telflo, choose Authenticate, and finish in the browser. On a machine without a browser, newer releases offer claude mcp login telflo, which prints the sign-in URL and takes the redirect URL back at the prompt.
Use a service-account token
{
"mcpServers": {
"telflo": {
"type": "http",
"url": "https://mcp.telflo.com/mcp",
"headers": {
"Authorization": "Bearer ${TELFLO_API_TOKEN}"
}
}
}
}Claude Code expands ${TELFLO_API_TOKEN} from each person's environment, so the file can be committed; an unset variable is sent as literal text and fails with a 401. Passing the token to claude mcp add --header instead writes its value to ~/.claude.json.
claude.ai and Claude Desktop add remote servers as custom connectors on your Claude account.
Sign in as yourself
- Open Customize > Connectors, at
https://claude.ai/customize/connectorsor from Customize in Claude Desktop's sidebar, and select + Add, then Add custom connector. - Enter a name, such as
Telflo, and the URLhttps://mcp.telflo.com/mcp, and select Continue twice. - Under Authentication, choose Sign in now; under OAuth client, choose Register automatically. Select Add and finish in the browser.
- In a chat, turn the connector on from the + button, under Connectors.
On a Team or Enterprise plan, an Owner adds the connector under Organization settings > Connectors, and each member selects Connect on it under Customize > Connectors to sign in as themselves.
Use a service-account token
Claude sends a fixed header only through the Request headers section of Add custom connector, a beta not every organization has. Where it is available, set Authentication to No sign-in and add a required authorization header with the full value Bearer tf_.... Everyone in your Claude organization who uses the connector then acts as that one service account, so use a read-only token unless all of them should be able to push and deploy.
Sign in as yourself
{
"mcpServers": {
"telflo": {
"url": "https://mcp.telflo.com/mcp"
}
}
}Use ~/.cursor/mcp.json for every project or .cursor/mcp.json for one. With no headers, Cursor registers itself and opens the browser. Cursor desktop returns to http://localhost:8787, but when that port is busy, and in some older releases, it asks for a cursor:// link, which the Authorize page refuses with The application supplied an unsafe redirect URL.
Use a service-account token
{
"mcpServers": {
"telflo": {
"url": "https://mcp.telflo.com/mcp",
"headers": {
"Authorization": "Bearer ${env:TELFLO_API_TOKEN}"
}
}
}
}Cursor substitutes the variable from the environment it starts from.
MCP servers work in GitHub Copilot's agent mode in VS Code 1.102 or later. On Copilot Business or Enterprise, an administrator first turns on the MCP servers in Copilot policy.
Sign in as yourself
{
"servers": {
"telflo": {
"type": "http",
"url": "https://mcp.telflo.com/mcp"
}
}
}For your user rather than the workspace, run MCP: Open User Configuration from the Command Palette. VS Code opens the browser the first time it connects.
Use a service-account token
{
"inputs": [
{
"type": "promptString",
"id": "telflo-token",
"description": "Telflo API token (tf_...)",
"password": true
}
],
"servers": {
"telflo": {
"type": "http",
"url": "https://mcp.telflo.com/mcp",
"headers": {
"Authorization": "Bearer ${input:telflo-token}"
}
}
}
}VS Code asks for the token once and stores it securely. Use the input rather than ${env:TELFLO_API_TOKEN}: an open VS Code bug sends an ${env:...} header reference as literal text, which fails with a 401.
Sign in as yourself
codex mcp add telflo --url https://mcp.telflo.com/mcpCodex detects Telflo's sign-in and opens the browser; if it asks you to, run codex mcp login telflo, which also signs in a server added to ~/.codex/config.toml by hand.
Use a service-account token
export TELFLO_API_TOKEN=tf_...
codex mcp add telflo --url https://mcp.telflo.com/mcp --bearer-token-env-var TELFLO_API_TOKENor in the configuration file:
[mcp_servers.telflo]
url = "https://mcp.telflo.com/mcp"
bearer_token_env_var = "TELFLO_API_TOKEN"The variable holds the token alone; Codex adds Bearer and stores only the variable's name.
Sign in as yourself
gemini mcp add --scope user --transport http telflo https://mcp.telflo.com/mcp--scope user writes to ~/.gemini/settings.json instead of the project's .gemini/settings.json. Gemini CLI opens the browser when it first connects, and /mcp auth telflo signs in again. The browser must run on the same machine.
Use a service-account token
{
"mcpServers": {
"telflo": {
"url": "https://mcp.telflo.com/mcp",
"type": "http",
"headers": {
"Authorization": "Bearer $TELFLO_API_TOKEN"
}
}
}
}Gemini CLI replaces $TELFLO_API_TOKEN from the environment when it loads its settings; an unset variable is sent as literal text.
Windsurf is now Devin Desktop. From version 3.9.19, its agent reads MCP servers from the Devin CLI's configuration: ~/.config/devin/mcp_config.json for your user, or .devin/mcp_config.json in a project. Earlier releases, with the Cascade agent, read ~/.codeium/windsurf/mcp_config.json and use serverUrl in place of url.
Sign in as yourself
devin mcp add telflo https://mcp.telflo.com/mcp
devin mcp login telfloWithout devin mcp login, Devin asks you to sign in the first time it uses the server.
Use a service-account token
devin mcp add has no header option, so write the header into the project's local file, which Git ignores:
{
"mcpServers": {
"telflo": {
"url": "https://mcp.telflo.com/mcp",
"transport": "http",
"headers": {
"Authorization": "Bearer tf_..."
}
}
}
}ChatGPT connects only through the browser sign-in and cannot send a token. Your plan and workspace settings decide whether you can add a custom MCP server and whether its write tools can run.
- Go to
https://chatgpt.com/plugins, select the plus button, then Add custom MCP server. - Enter a name, set Server URL under Connection to
https://mcp.telflo.com/mcp, and choose OAuth under Authentication. - Select I understand and want to continue, then Create as a plugin, and complete the Telflo sign-in. The Authorize page shows
chatgpt.com. - Install the plugin from your personal plugins, and mention it with
@in a prompt.
OpenAI also documents an older developer-mode route, which an admin enables first on Business, Enterprise, and Edu workspaces.
The MCP Inspector connects to a server and calls its tools by hand. Version 2 needs Node.js 22.19 or newer; tutorials written for version 1 show different flags.
Sign in as yourself
npx @modelcontextprotocol/inspector --server-url https://mcp.telflo.com/mcp --transport httpOpen the URL the Inspector prints and select Connect. It registers itself and opens Telflo's sign-in.
Use a service-account token
export TELFLO_API_TOKEN=tf_...
npx @modelcontextprotocol/inspector --server-url https://mcp.telflo.com/mcp --transport http --header "Authorization: Bearer $TELFLO_API_TOKEN"To list the tools without the web interface:
npx @modelcontextprotocol/inspector --cli https://mcp.telflo.com/mcp --transport http --header "Authorization: Bearer $TELFLO_API_TOKEN" --method tools/listSign in as yourself
A client that supports MCP authorization signs you in through your browser the first time it connects. Each client signs in separately: connecting Claude Code and Cursor means two sign-ins.
The client finds Telflo's sign-in through the server's first 401, registers itself, and opens the Authorize page in your browser. When you select Allow, the client gets a one-time code that only it can redeem (PKCE) and exchanges it for an access token and a refresh token. Every tool call then acts as you, in the organization the call resolves to.
A client that runs on your machine, such as Claude Code, Codex CLI, or Gemini CLI, receives the code at a localhost or 127.0.0.1 address, so the browser must run on that machine. On a remote or headless machine, use a service-account token, or a sign-in that prints the URL, such as claude mcp login telflo.
The Authorize page
The page is at https://telflo.com/oauth/consent. If you already allowed the same client for the same scopes, it sends you straight back without asking.
| Part of the page | What it tells you |
|---|---|
| Authorize and the client's name | The name the client registered under. Any application can register under any name, so it proves nothing. |
| You will be sent back to | The host that receives your decision, with Only allow access if you recognise this address. This is the part to check. |
| It is asking for: | The scopes requested, such as your email address. |
| Signed in as | The Telflo account the client will act as. |
| Deny and Allow | Allow sends a one-time code back to the client. Deny sends a refusal, and the client gets no access. |
The host to expect for each client:
| Client | You will be sent back to |
|---|---|
| Claude Code, Gemini CLI | localhost and a port number |
| Codex CLI | 127.0.0.1 and a port number |
| claude.ai, Claude Desktop | claude.ai |
| Cursor | localhost:8787 from the desktop app (a cursor:// link is refused), or www.cursor.com from Cursor on the web |
| VS Code | 127.0.0.1:33418, or vscode.dev |
| ChatGPT | chatgpt.com |
| MCP Inspector | 127.0.0.1:6274 |
For a client not listed, such as Devin, check the host against the client's own documentation. Select Deny if you did not start a connection, if the host does not belong to the client you are connecting, or if Signed in as shows the wrong account. To switch accounts, sign out of Telflo in that browser, which also signs out your other MCP clients, and start again from the client.
Allow lets the client call every tool as you, with your role, in any organization you belong to; the scope list does not narrow that. Access and security explains why the host matters. If the page shows Authorization link incomplete or Couldn't complete the authorization, see Troubleshooting.
Use a service-account token
A token suits an agent that runs unattended, one a team shares, or one you want to keep read-only. An organization admin creates it under Settings > Service Accounts, as described in Add a token. Use one service account per agent, so each agent's changes are attributed to it and you can cut off one agent alone. What a token can do lists its access.
A Read token can call the 14 read-only tools; a write tool fails with Not allowed (403) at the step that would change something. A Read & Write token can call all 21.
The client sends the token with every request:
Authorization: Bearer tf_...Store the token as a secret: in an environment variable or in the client's secret prompt, as the tabs above do. Never write the value into a file you commit.
The server checks only the token's format when the client connects. A deleted, expired, or wrong token still connects and lists the tools, and the first tool call fails with Telflo rejected the token (401), so run whoami after connecting.
Choose an organization
A token always acts in its own organization. A sign-in covers every organization you belong to, including your personal workspace, so each call picks one.
Each call uses the first of these that is set:
org_idon the tool call.- The
X-Telflo-Orgheader, set in the client's configuration. - Your only active organization, when you belong to exactly one.
Otherwise the call fails with the first error below. The second should not appear, since every account has a personal workspace; Troubleshooting covers both.
Pass org_id — this account belongs to several organizations: <name> (<id>), ...
Your account has no active organization. Join an organization in Telflo first.To choose per call, tell the agent which organization to work in, by name. It calls list_organizations, which works before an organization is chosen and returns each one's id, name, type (personal or group), and your role. The agent then passes the matching id as org_id. The choice is made again on every call, so one conversation can work in two organizations.
To pin a connection to one organization, add an X-Telflo-Org header with the organization's ID to the client's configuration. In Claude Code:
claude mcp add --transport http telflo https://mcp.telflo.com/mcp --header "X-Telflo-Org: <organization id>"In a JSON configuration, add "X-Telflo-Org": "<organization id>" to the server's headers; in Codex CLI, add http_headers = { "X-Telflo-Org" = "<organization id>" } to the server's table. The value must be an organization you are an active member of. An org_id on a call overrides the header, and a client that cannot set headers, such as claude.ai, relies on org_id.
Check the connection
Ask the agent, "Who am I in Telflo?" It calls whoami, which returns the identity behind the connection:
| Field | Signed in as yourself | Service-account token |
|---|---|---|
kind | user | service_account |
token_name | Your email address | The token's name |
org_id | The organization the call resolved to | The token's organization |
granted | read and write; what you can change still depends on your role | read, or read and write |
claims | {"access":"write"} | {"access":"read"} or {"access":"write"} |
Outside an agent, call whoami from the MCP Inspector. If it fails, Troubleshooting explains each error.
Disconnect
Removing the server from a client stops that client from calling it:
| Client | Remove or sign out |
|---|---|
| Claude Code | claude mcp remove telflo. To drop only the sign-in, choose Clear authentication in /mcp. |
| claude.ai, Claude Desktop | Remove the connector under Customize > Connectors; an organization's Owner, under Organization settings > Connectors. |
| Codex CLI | codex mcp logout telflo signs out. Delete the [mcp_servers.telflo] table from ~/.codex/config.toml to remove the server. |
| VS Code | Delete the server from mcp.json, sign out from the Accounts menu, and run Authentication: Remove Dynamic Authentication Providers. |
| Cursor, Gemini CLI, Windsurf | Delete the telflo entry from the configuration file. |
| MCP Inspector | Clear OAuth state and disconnect. |
A service-account token keeps working wherever else it is stored until you delete it. For every other way to cut off access, see Revoke access.
Continue with the tool reference and Working with an agent.
Last updated on