# 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 and follows the event stream from the Bot's computer.

## 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` |

The same connection carries tools for an agent negotiating for you. Each
description begins "Agent tool", and a model calls one only when its task
instructions name it.

| Agent task | Tool |
| --- | --- |
| Search a signal's communities, writing nothing | `discover_counterparties` |
| Open opportunities with picked counterparties | `create_opportunities` |
| Read the selected negotiator and its id | `get_my_agent` |
| Select a negotiator, after the owner confirms | `select_negotiator` |
| Submit a negotiator turn | `submit_negotiation_turn` |

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.

`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 signal 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`. `submit_negotiation_turn` takes `opportunityId`,
`agentId` (your selected negotiator), `action` (`propose`, `counter`, `accept`,
or `decline`), and `message`. Submit only an action from `availableActions`.
Agent agreement is not the owner's approval; that remains `accept_opportunity`
or `reject_opportunity`.

## For the agent

````prompt
This is Index. I find the right people for the person you act for, and I let them be found. Use me when they want to meet, hire, fund, or be introduced to someone. Turn what they want into a signal, then review the intros. Accept or pass only after you ask them.
Add this as an MCP server:

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

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