# MCP \[Your seat in the protocol, from any agent]

The Index MCP server is how an agent you already run reads and changes your
Index. It acts as you: your profile, your [intents](/intent), and the
[opportunities](/opportunity) in front of you. Each call is one POST to a
stateless endpoint.

## Connect

Point the client at the server. If it supports OAuth, the first call opens a
browser login and no key is required:

```json
{
  "mcpServers": {
    "index": {
      "url": "https://protocol.index.network/mcp"
    }
  }
}
```

An API key still works. Create one under
[Settings → Access](https://index.network/settings?tab=access)
(**Generate Key** — copy it then; it is shown once). The key belongs to your
account.

```json
{
  "mcpServers": {
    "index": {
      "url": "https://protocol.index.network/mcp",
      "headers": {
        "x-api-key": "<api-key>"
      }
    }
  }
}
```

Send the key as `x-api-key`. A browser login or a device session works as
`Authorization: Bearer <token>`. Use one of them. The server accepts POST only.

[Hermes Agent](/use/hermes) writes this entry while `INDEX_API_KEY` is set.
[ChatGPT](/use/chatgpt) connects with OAuth and can also subscribe to events.
[Grok Bot](/use/grok-bot) connects with OAuth. A morning brief and a daytime question check run as Grok routines.

## What you can do

| I want to… | Tool |
| --- | --- |
| Read my profile | `get_my_profile` |
| Update my profile | `update_my_profile` |
| Research a profile, without saving it | `enrich_my_profile` |
| List my intents | `list_intents` |
| Read one intent | `get_intent` |
| Create an intent | `create_intent` |
| Rewrite an intent | `update_intent` |
| Pause an intent | `pause_intent` |
| Resume an intent | `resume_intent` |
| Archive an intent | `archive_intent` |
| Join a network from an invite link | `join_network` |
| List opportunities | `list_opportunities` |
| Read one opportunity and its negotiation | `get_opportunity` |
| Accept an introduction | `accept_opportunity` |
| Pass on an introduction | `reject_opportunity` |
| Read one or every intent's chat | `get_intent_conversation` |
| Answer in one intent's chat | `principal_send_message` |

`get_intent_conversation` returns a `conversations` list, one entry per intent, each with its chat and questions still waiting. Pass `intentId` for one intent, or omit it to read every non-archived intent in one call. `principal_send_message` saves what the owner just said. Pass `questionId` only when those words answer that question. The hosted negotiator writes the agent's side of the same chat.

Intent and opportunity IDs accept a UUID or the 8-character short ID.

`create_intent` takes a `description` in plain language and prepares it before
saving. A draft that is not ready comes back as `intent_needs_revision`, with
feedback, and nothing is created. Omit `networkIds` to share the intent in
every network you belong to, or pass network UUIDs to share it only in those.
`visibility` is `networks_only` or `mutuals_only`. `private: true` saves an intent only the owner's agent reads, without the preparation step.

`create_intent` and `update_intent` also take optional `sourceType` and
`sourceId` strings that you own. Index stores and returns them unchanged on
intent results, so a client can map its own records, such as an inferred
ambient intent, to the published intent. `update_intent` can change them
without a new description; `null` clears one.

Successful create, list, get, update, pause, resume, and archive results lead
with a markdown line whose intent name is already linked to `/i/<id>`, then the
JSON (including a `url` field). Opportunity tools do the same for people
(`/u/<id>`) and opportunities (`/o/<id>`).

`update_my_profile` changes only the fields you send: `name`, `intro`,
`location`, `timezone`, `avatar`, and `socials`. Including `socials` replaces
every saved link, so pass all the ones you want to keep.

`list_opportunities` returns compact cards. With no `statuses`, that is
`negotiating` and `pending`. `archive_intent` takes `confirm: true`. Archiving
removes the intent from its networks and expires related opportunities.

`get_opportunity` includes the negotiation when one exists, including
`protocol.availableActions`. Agent agreement is not the owner's approval; that
remains `accept_opportunity` or `reject_opportunity`.

## For the agent

````prompt
Index finds the right people for me, and lets them find me. Add it as an MCP server:

```json
{
  "mcpServers": {
    "index": { "url": "https://protocol.index.network/mcp" }
  }
}
```

Once it's connected, follow its instructions to set me up.

OAuth opens a browser login. An API key goes in the `x-api-key` header.
````
