> ## Documentation Index
> Fetch the complete documentation index at: https://docs.periphery.exposed/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP server

> Connect Claude, ChatGPT, Cursor or your own agent to Periphery, and search the index and read app records in plain language.

The MCP server lets an AI assistant or agent work with Periphery for you. Connect it once, then ask in plain language: "what does Periphery have on acme.com?", "which of these look like ours, and which look like phishing?", "list the apps exposing a verified Stripe key and draft the rotation plan". The assistant runs the searches, reads the records and screenshots, and does the sorting and the write-up.

It reads the same index as the console and the [API](https://docs.periphery.exposed/api/overview.md), under the same plan, monthly allowance and redaction.

| | |
| - | - |
| Server URL | `https://mcp.periphery.exposed/mcp` |
| Transport | Streamable HTTP, MCP versions 2025-03-26 to 2026-07-28 |
| Authentication | Sign in with your Periphery account (OAuth), or your API key as a bearer token |
| Plans | Plus |

## Connect your assistant

> [tab] Claude
>
> 1. In Claude, open **Settings**, then **Connectors**, and choose **Add custom connector**.
> 2. Name it Periphery and paste the server URL, `https://mcp.periphery.exposed/mcp`.
> 3. Connect it. Claude opens Periphery: sign in if asked, check the request, and click **Allow**.
>
> The connector follows your Claude account to the web, desktop and mobile apps. On a Team or Enterprise plan, an owner may have to add custom connectors for the organisation first.

> [tab] ChatGPT
>
> Add Periphery as a custom connector with the server URL `https://mcp.periphery.exposed/mcp` and OAuth authentication. ChatGPT opens Periphery: sign in if asked, check the request, and click **Allow**.
>
> Where custom connectors live in ChatGPT's settings, and whether developer mode has to be on, depends on your ChatGPT plan.

> [tab] Claude Code
>
> ```bash theme={null}
> claude mcp add --transport http periphery https://mcp.periphery.exposed/mcp
> ```
>
> Then run `/mcp` in Claude Code and choose Periphery to sign in. To use your API key instead:
>
> ```bash theme={null}
> claude mcp add --transport http periphery https://mcp.periphery.exposed/mcp \
>   --header "Authorization: Bearer $PERIPHERY_API_KEY"
> ```

> [tab] Cursor
>
> Add the server to `~/.cursor/mcp.json`, or to `.cursor/mcp.json` in a project:
>
> ```json theme={null}
> {
>   "mcpServers": {
>     "periphery": {
>       "url": "https://mcp.periphery.exposed/mcp"
>     }
>   }
> }
> ```
>
> Cursor sends you to Periphery to sign in the first time it connects. To use your API key instead, add `"headers": {"Authorization": "Bearer <your key>"}` next to `url`.

> [tab] VS Code
>
> Add the server to `.vscode/mcp.json`:
>
> ```json theme={null}
> {
>   "servers": {
>     "periphery": {
>       "type": "http",
>       "url": "https://mcp.periphery.exposed/mcp"
>     }
>   }
> }
> ```
>
> VS Code sends you to Periphery to sign in the first time the server starts.

> [tab] Claude API
>
> The Messages API connects to remote MCP servers itself. Pass your Periphery API key as the server's `authorization_token`:
>
> ```bash theme={null}
> curl https://api.anthropic.com/v1/messages \
>   -H "content-type: application/json" \
>   -H "x-api-key: $ANTHROPIC_API_KEY" \
>   -H "anthropic-version: 2026-10-21" \
>   -H "anthropic-beta: mcp-client-2025-11-20" \
>   -d '{
>     "model": "claude-opus-5-5",
>     "max_tokens": 16000,
>     "mcp_servers": [{
>       "type": "url",
>       "url": "https://mcp.periphery.exposed/mcp",
>       "name": "periphery",
>       "authorization_token": "'"$PERIPHERY_API_KEY"'"
>     }],
>     "tools": [{"type": "mcp_toolset", "mcp_server_name": "periphery"}],
>     "messages": [{"role": "user", "content": "What has Periphery indexed for acme.com? Sort the apps by how likely they are to be ours."}]
>   }'
> ```

Any other MCP client works the same way: point it at the server URL and let it run the sign-in, or give it your API key as an `Authorization: Bearer` header.

## Two ways to authenticate

**Sign in with Periphery.** Chat apps such as Claude and ChatGPT take a URL, not a key, so they use OAuth. The app registers itself with Periphery and sends you to a Periphery page that names the app, the account it will use, what it will be able to do, and where you return to. Once you click **Allow**, the app gets a token for the MCP server only, which it renews on its own while you keep using it. Periphery sends you back to the app only when you click **Allow** or **Cancel**; a malformed request shows an error instead.

> [!WARNING]
>
> Any app can register itself and give itself any name. Before you click **Allow**, check where the page says you will return: a site such as `claude.ai` or `chatgpt.com` for a chat app, or **an app on this device** for a desktop app or IDE. If you did not start the connection, close the tab: **Cancel** also sends you back, to wherever the app registered.

**API key.** Clients that let you set a header, such as Claude Code, Cursor, VS Code, the Claude API or your own agent, can send your [API key](https://docs.periphery.exposed/api/authentication.md) as `Authorization: Bearer <key>`. Rotating the key on the account page disconnects every client that uses it.

## What the assistant can do

| Tool | What it does | Uses a search |
| - | - | - |
| `search_apps` | Runs a query in the [search syntax](https://docs.periphery.exposed/search/query-syntax.md) and returns a page of up to 50 hits. | Yes, one per page |
| `get_app` | Reads one app's full record, with masked credentials. | No |
| `get_app_screenshot` | Returns the app's last screenshot as an image the assistant can look at. | No |
| `get_account` | Shows your plan, the searches you have left this month and when they reset. | No |
| `list_key_types` | Lists the credential detectors found in the index, for the `creds:` filter. | No |

Clients that show prompts also offer three ready-made investigations: **Investigate a domain**, **Triage exposed credentials** and **Find clones of an app**. See [Tools and prompts](https://docs.periphery.exposed/mcp/tools.md) for every input and output.

The server also briefs the assistant on how to work with Periphery: the query syntax, the search budget, and that a match is a lead to weigh, not proof of who runs an app.

## Limits

* **Plan.** MCP access is part of Plus. On Free, the sign-in page offers the upgrade instead of **Allow**, and a client that connects anyway gets a message, which your assistant relays, saying the plan does not include MCP.
* **Monthly searches.** Each `search_apps` call is one search from your [monthly allowance](https://docs.periphery.exposed/plans.md#monthly-searches), shared with the console and the API; each page is another search. Reading records and screenshots uses none. Every search result says how many searches are left, so the assistant can budget its work.
* **Rate limit.** Your account makes one request per second across the console, the API and MCP. Assistants often call several tools at once, so the server queues those calls for a few seconds instead of refusing them.

## What leaves Periphery

> [!WARNING]
>
> Whatever your assistant reads from Periphery, email addresses and masked credentials included, is sent to the assistant and to the AI provider behind it, and is handled under their terms from there. Check that your organisation allows that before you connect. Over MCP the credentials Periphery found travel masked, in records, page text and search snippets alike, and so does anything else in page text that looks like a key ([details](https://docs.periphery.exposed/mcp/tools.md#get_app)). Screenshots show the page as any visitor sees it, except that the screenshot of a page printing a credential Periphery found isn't sent at all.

## Disconnect an app

**Settings**, under **AI assistants (MCP)**, lists every app connected to your account, with when it was connected and last used. **Disconnect** stops its access at once. A connection ends on its own after 30 days unused, and after 90 days in any case; the app then asks you to sign in again. Deleting your account disconnects every app.

## If an app keeps asking you to sign in

An app's sign-in renews itself with a token that changes every time. If an old one is used again later, Periphery takes it as a sign that a copy exists outside the app, and ends the connection, so that a copied token stops working too. An app that runs several copies of itself on one sign-in can trip this: several Claude Code sessions open at once, for example, when one of them sat idle for a while. Connect those with your [API key](#two-ways-to-authenticate) instead.

If the sign-in page says the app isn't registered with Periphery, remove Periphery from the app and add it again: the app then registers anew.

## Attribution

Your assistant's conclusions about who runs an app are its own reading of public evidence. Periphery performs ownership investigation and attribution as part of its [managed service](https://docs.periphery.exposed/plans.md#managed-service-and-custom-terms); the console, the API and the MCP server surface candidate matches.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.