> For the complete documentation index, see [llms.txt](https://docs.currents.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.currents.dev/ai/connect/remote.md).

# Any MCP client

Connect any MCP client to the Currents MCP server with a sign-in or an API key, what a connection can reach, and the endpoint reference

This page is for MCP clients that the other [Connect your agent](/ai/connect.md) pages do not cover. It also covers API keys and what a connection can reach, for every client.

Currents hosts the MCP server at `https://mcp.currents.dev/mcp`. There is nothing to install. It is listed in the [MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers/dev.currents%2Fmcp/versions/latest) as `dev.currents/mcp`.

## Connect with a sign-in

Point the client at `https://mcp.currents.dev/mcp` and leave any client ID and secret empty. The first time the client calls Currents, you [sign in](/ai/connect.md#sign-in-once) in the browser. A client that can only register itself dynamically cannot connect this way; use an API key. Client developers: see [Endpoint reference](#endpoint-reference).

The connection acts as the person who signed in, in the organization they picked, with the permissions they approved. See [OAuth](/authentication/oauth.md).

## Connect with an API key

Use an API key when the client cannot complete the OAuth sign-in, or when no person is there to sign in, such as in CI. Send it in the `Authorization` header:

```json
{
  "mcpServers": {
    "currents": {
      "type": "http",
      "url": "https://mcp.currents.dev/mcp",
      "headers": {
        "Authorization": "Bearer your-api-key"
      }
    }
  }
}
```

A key acts as the organization, not as a person, and has one access level: **Read Only** or **Read & Write**. See [API Keys](/dashboard/administration/api-keys.md).

A connection made with a key is not listed under **Connected Applications**. Removing the server from the client does not end the key: it keeps working until an admin revokes it under **Organization → API Keys**.

## What a connection can reach

The server lists only the tools the connection's permissions allow, capped by the person's current role. It checks on every request. If a tool is missing, the connection lacks the permission; an agent that calls it by name is told the tool does not exist. [MCP tools and permissions](/ai/reference/mcp-server.md) lists the permission for each tool.

A **Read Only** API key gets the read tools, `currents-create-evidence-links` and the two Jira lookups (`currents-list-jira-projects` and `currents-list-jira-issue-types`). A **Read & Write** key gets every tool.

## Endpoint reference

For client developers. The client must use the Streamable HTTP transport of MCP and identify itself the way [For client developers](/authentication/oauth.md#for-client-developers) describes.

|                           |                                                                                 |
| ------------------------- | ------------------------------------------------------------------------------- |
| Endpoint                  | `https://mcp.currents.dev/mcp`                                                  |
| Method                    | `POST` only. `GET` and `DELETE` answer `405`                                    |
| Transport                 | Streamable HTTP, stateless, one exchange per request                            |
| Headers                   | `Content-Type: application/json`, `Accept: application/json, text/event-stream` |
| OAuth resource identifier | `https://mcp.currents.dev/mcp`                                                  |
| OAuth metadata document   | `https://mcp.currents.dev/.well-known/oauth-protected-resource/mcp`             |

The endpoint and the REST API are separate OAuth resource servers: a token for one is refused by the other. For the authorization server, PKCE and client identification, see [For client developers](/authentication/oauth.md#for-client-developers).

## Troubleshooting

The errors a client gets from the server. For errors in a specific agent, see its page under [Connect your agent](/ai/connect.md).

| Answer                                         | Cause                                                                                                    |
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `401` with a `WWW-Authenticate` header         | No credential, or an expired one. The header names the metadata document a client starts discovery from. |
| `403` `organization_not_enabled`               | The endpoint is not served to that organization. Contact <support@currents.dev>.                         |
| `405` with `Allow: POST`                       | The client opened a `GET` stream. This server is stateless and answers `POST` alone.                     |
| `406` or `415`                                 | A missing `Accept` or `Content-Type` header.                                                             |
| `does not support dynamic client registration` | The client can only register itself dynamically. Use an API key header instead.                          |

When a tool call fails, the server returns the status and response body to the agent, so the agent can tell why.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.currents.dev/ai/connect/remote.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
