# MCP clients

Claude Desktop, Cursor, and anything else that speaks MCP. One stdio configuration, the same pipeline.

`research-scan mcp` speaks MCP on stdin and stdout and nothing else. It reads no
token and needs none: the process is trusted because your client launched it.

Nothing extra to install — the server ships with the package.

import McpDiagram from '@components/McpDiagram.astro';

<McpDiagram />

## The configuration

The same block works in every client. Only the file it goes in changes.

```json
{
  "mcpServers": {
    "research-scan": {
      "command": "uvx",
      "args": ["research-scan", "mcp"]
    }
  }
}
```

| Client | Where that goes |
|---|---|
| Claude Code | `.mcp.json` in the project root |
| Claude Desktop | `claude_desktop_config.json` |
| Cursor | `.cursor/mcp.json` |
| Anything else that speaks MCP | Wherever that client keeps its server list |

`uvx` resolves and caches the package on first use, so there is no install step to
sequence — the first launch is slower and the rest are not. If you would rather
pin an installed copy, `uv tool install research-scan` and then use
`research-scan` as the command with `["mcp"]` as the args.

## Confirm the server can start

```bash
research-scan version
```

```
research-scan 0.5.2
python       3.13.13
platform     macOS-14.2.1-arm64-arm-64bit-Mach-O
mcp          enabled
```

`mcp enabled` means the server will start. Because its dependencies are core
rather than optional, `disabled` means a broken install — reinstall with
`uv tool install research-scan`.

You do not normally run `research-scan mcp` by hand. It serves on stdio and waits
for a client, so a terminal invocation looks like a hang. Let the client launch
it.

## The four tools

Four tools, one per decision the pipeline needs from a model:

| Tool | The decision |
|---|---|
| `scan_start` | You supply the query plan. |
| `scan_continue` | Screening scores, gap queries, or a page of rerank entries. |
| `scan_verify` | Check the ranked papers against the live record. |
| `scan_result` | Collect the deliverable. |

They are not a chat endpoint over the pipeline. Each is a point where a judgement
is needed, and the client's model supplies exactly the cognition the skill would —
same stage order, same artifacts, same verification. The adapter drives the CLI as
a subprocess and reads its exit codes; it never imports a stage's internals and
makes no judgement about papers.

Full signatures and the decision points between calls are in the
[MCP tools reference](/reference/mcp-tools/).

## Credentials

The MCP server reads the same configuration as the CLI, so
[`research-scan configure`](/getting-started/configuration/) covers both. If your
client launches the server in an environment that does not inherit your shell,
`~/.config/research-scan/.env` is the store it will find.

## Other transports

`research-scan mcp --help` documents the rest of the transport options. For local
agent clients — Claude Code, Claude Desktop, Cursor — stdio is the mode you want,
and the one this documentation covers. Anything that would expose the server
beyond your own machine is a security question first; the main repo's
[`SECURITY.md`](https://github.com/Synectic-Research/research-scan/blob/main/SECURITY.md)
is the place that answers it.
