# Cursor integration

> Install GNO as an MCP server in Cursor for hybrid retrieval while you code.

Section: Integrations  
Canonical: https://gno.sh/docs/cursor  
Markdown: https://gno.sh/docs/cursor.md

Cursor supports MCP servers natively. One-command install gives Cursor access to GNO’s 38 read-only tools by default (search, query, verified Ask, Context Capsules, memory recall, graph, backlinks, similar). Twenty-one write tools are opt-in (60 total with the read-only request-status lookup they enable).

## Quickstart

```
bun install -g @gmickel/gno
gno setup ~/notes --name notes
gno mcp install --target cursor
```

After install, restart Cursor. The GNO MCP server will appear in the MCP settings panel automatically.

## Using it in Cursor

Composer and chat can invoke GNO tools. Example:

> “Search my notes for the retry logic we discussed”

> “Find related notes to this file and summarize them”

Cursor picks the appropriate GNO tool and cites the source docs in its response.

## Project scope

For project-specific MCP configuration, install at the project scope. This writes a `.cursor/mcp.json` in the current project.

```
gno mcp install --target cursor --scope project
```

## Share the setup with your team

Project-scope MCP config says _that_ Cursor should talk to GNO. A committed [project profile](https://gno.sh/docs/project-profiles) says _what_ it should index: collection root, include and exclude globs, contexts, content types, and model preset, all repository-relative and portable.

```
gno profile diff # preview what applying would change
gno setup . --apply-profile # apply, then prove retrieval
```

Nothing is applied implicitly, and GNO’s database, model cache, and locks never go into the repository.

## Tuning retrieval for code

Code and prose want different embeddings. Rather than compromising globally, override per collection:

```
gno collection add ~/work/service/src --name service-code \
  --pattern "**/*.{ts,tsx,go,rs,py}" --exclude node_modules
```

Source files also get structural first-pass chunking for TypeScript, JavaScript, Python, Go, and Rust, so a retrieved chunk tends to be a function rather than an arbitrary window. See [configuration](https://gno.sh/docs/configuration) for per-collection `models.embed` overrides.

## Manual configuration

If auto-install fails, add to `~/.cursor/mcp.json`:

```
{
  "mcpServers": {
    "gno": {
      "command": "gno",
      "args": ["mcp"]
    }
  }
}
```

This minimal form relies on `gno` being on Cursor’s `PATH`, which is often not the same `PATH` your shell has. Prefer the installer, which records an absolute entrypoint plus the active index, config, data, and model-cache locations. Run `gno mcp install --target cursor --dry-run --json` to see those exact values before writing them.

## Verifying and troubleshooting

- Restart Cursor after installing. The server appears in the MCP settings panel.
- `gno mcp status` reports configuration presence. For a real retrieval proof, run the explicit read-only check on the Connectors page of `gno serve`.
- Server present but returning nothing? The index is probably empty for that collection. `gno doctor` separates lexical activation from semantic readiness.
- If you point Cursor at the [resident HTTP gateway](https://gno.sh/docs/mcp#resident-http), it shares loaded models with the daemon until they go idle, and the next request reloads them. CLI commands and the default stdio MCP install run their own GNO process and do not use the gateway.
