Connect AI agents with MCP
Snaggy has a built in MCP server, so AI apps like Claude, Codex, Cursor and Gemini can search your saved links, file new ones and keep your library tidy while they work.
How it works
MCP (Model Context Protocol) is the standard way AI apps talk to other tools. Snaggy's MCP server runs inside the app itself, so anything an assistant does goes through the same library you see in Snaggy.
- It stays on your Mac. The server only listens on
127.0.0.1. Other computers on your network can't reach it, and nothing is sent to us. - It needs your access key. Every request must carry the private key shown in Snaggy's settings.
- It's off until you turn it on, and it only runs while Snaggy is open.
- It can't delete anything. The most an assistant can do is move a link to the Archive, where you can restore it.
Turn it on
- Open Snaggy and go to Settings › AI & MCP.
- Turn on Let AI assistants use Snaggy. The status changes to Running and shows the server address.
- Under Connect an assistant, pick your app and click Copy. The snippet in the app already has your access key filled in.
- Paste it where your app expects it (see below), then start a new session in that app.
You can also do this during setup, on the AI agents step.
Connect your agent
These are the same snippets Snaggy shows in Settings. Copying from the app is easiest, because it fills in your key. If you copy from here, replace YOUR_ACCESS_KEY with the key from Settings › AI & MCP › Access key.
claude mcp add --transport http snaggy http://127.0.0.1:52770/mcp --header "Authorization: Bearer YOUR_ACCESS_KEY"Run it in Terminal, then start a new Claude Code session. Check it with /mcp.
{
"mcpServers": {
"snaggy": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://127.0.0.1:52770/mcp", "--header", "Authorization: Bearer YOUR_ACCESS_KEY"]
}
}
}In Claude, open Settings › Developer › Edit Config, paste this into claude_desktop_config.json, then quit and reopen Claude. Claude Desktop reaches Snaggy through the mcp-remote bridge, which needs Node.js.
{
"mcpServers": {
"snaggy": {
"url": "http://127.0.0.1:52770/mcp",
"headers": { "Authorization": "Bearer YOUR_ACCESS_KEY" }
}
}
}Add it to ~/.cursor/mcp.json (or the project's .cursor/mcp.json), then reload Cursor.
[mcp_servers.snaggy]
url = "http://127.0.0.1:52770/mcp"
http_headers = { "Authorization" = "Bearer YOUR_ACCESS_KEY" }Add it to ~/.codex/config.toml, then start a new Codex session.
gemini mcp add --transport http snaggy http://127.0.0.1:52770/mcp --header "Authorization: Bearer YOUR_ACCESS_KEY"Run it in Terminal, then restart Gemini CLI. Check it with /mcp.
{
"mcpServers": {
"snaggy": {
"serverUrl": "http://127.0.0.1:52770/mcp",
"headers": { "Authorization": "Bearer YOUR_ACCESS_KEY" }
}
}
}In the Agent panel, open … › MCP Servers › Manage MCP Servers › View raw config, paste it in, then refresh.
Other MCP apps
Any app that supports MCP over HTTP (often called Streamable HTTP) and lets you add a header can connect with these two settings:
| Setting | Value |
|---|---|
| Server URL | http://127.0.0.1:52770/mcp |
| Header | Authorization: Bearer YOUR_ACCESS_KEY |
Apps that only run local command tools can use the mcp-remote bridge, as in the Claude Desktop example.
What your agent can do
Snaggy offers seven tools. Three only read your library and four change it. Your agent decides when to use them based on what you ask.
search_linksReads
Searches saved links by words in the title, address or note. Matching ignores upper and lower case. With no query it returns the newest links.
| Argument | Type | Required | What it does |
|---|---|---|---|
query | string | No | Words to look for. Leave it out to list the newest links. |
folder | string | No | Only search this folder. Use the exact name from list_folders. |
limit | integer | No | How many links to return. Default 20, maximum 200. |
include_archived | boolean | No | Also search the Archive. Default false. |
Returns count (every match) and links (up to limit, newest first).
list_foldersReads
Lists every folder with how many links it holds and how many of those are unread. Archived links aren't counted.
No arguments.
Returns a list of { name, links, unread }.
list_pinnedReads
Lists your pinned favorite links in the order you arranged them. The first eight are the ones that open with ⌘1–⌘8 in Snaggy's menu bar window.
No arguments.
Returns a list of links, in pin order.
save_linkChanges
Saves a web page. Without a folder, Snaggy files it with on-device AI, the same way it files links you snag yourself. If the exact address is already saved, nothing new is created: the existing link is returned, and restored if it was in the Archive.
| Argument | Type | Required | What it does |
|---|---|---|---|
url | string | Yes | The page address. Must start with http:// or https://. |
title | string | No | The page title. Without one, Snaggy uses the site name. |
folder | string | No | An existing folder name. Snaggy doesn't create folders from here. |
Returns the saved link. Snaggy shows a small notice when an assistant saves something.
move_linkChanges
Moves a saved link into another existing folder.
| Argument | Type | Required | What it does |
|---|---|---|---|
id | string | Yes | The link id from search_links. |
folder | string | Yes | An existing folder name, exactly as list_folders shows it. |
Returns the link with its new folder.
archive_linkChanges
Moves a saved link to the Archive. Archived links are deleted after 60 days unless restored; you can change the number of days in Settings › Data.
| Argument | Type | Required | What it does |
|---|---|---|---|
id | string | Yes | The link id from search_links. |
Returns a short confirmation. There is no tool to delete a link outright.
set_noteChanges
Replaces the note on a saved link. Sending empty text removes the note.
| Argument | Type | Required | What it does |
|---|---|---|---|
id | string | Yes | The link id from search_links. |
note | string | Yes | The new note text. |
Returns the updated link.
What a link looks like
Tools that return links describe each one with these fields:
| Field | What it is |
|---|---|
id | The link's id. Pass it to move_link, archive_link and set_note. |
title, url | The page title and address. |
folder | The folder name. A link Snaggy is still sorting shows Inbox (being sorted). |
saved_at | When it was saved, as an ISO 8601 date. |
opened | true once the link has been opened from Snaggy. |
note | The link's note, if it has one. |
summary | A one-sentence summary Snaggy wrote with on-device AI, if it has one. |
saved_from | Where it came from, such as Safari or AI assistant. |
archived | true if the link is in the Archive. |
Things to ask
- Find that agents article I saved last week and summarise it.
- What did I save about SwiftUI animations? List the five newest.
- Save https://developer.apple.com/design/human-interface-guidelines to my Design folder.
- Which folders have the most unread links?
- Move everything from github.com in Reading to Dev.
- Add a note to the Linear article: "use for the onboarding plan".
- Archive the links in Inbox that are older than a month.
Security and privacy
- Local only. The server accepts connections from this Mac only, never from your network or the internet.
- Access key. Requests without the right key are refused. Treat the key like a password and only paste it into apps you trust.
- New key. Click the arrows next to the key in Settings › AI & MCP to make a new one. Apps using the old key stop working until you give them the new one.
- Websites can't use it. Requests that come from a web page in your browser are refused, even with the key.
- What the AI app sees. Links your agent finds are sent to that AI app, and from there to its provider, like anything else you share in a chat. Their privacy policy covers what happens next.
- Turning it off stops the server straight away.
- License. If Snaggy is locked because there's no active license, every tool answers with a message asking you to add your key.
Troubleshooting
The agent says Snaggy isn't connected
Check that Snaggy is open (its icon is in the menu bar) and that Settings › AI & MCP says Running. Then start a new session in your agent, because most apps only load MCP servers when a session starts.
"Missing or wrong access key"
The key in your agent's config doesn't match Snaggy's. This happens after making a new key. Copy the snippet from Settings again and replace the old one.
"Couldn't start on port 52770"
Another app is already using that port. Quit the other app, then turn the setting off and on again in Snaggy.
"Snaggy is locked"
Snaggy needs an active license. Open Snaggy and add your license key. Your links are all still there.
Claude Desktop doesn't show Snaggy
Claude Desktop needs Node.js for the mcp-remote bridge. Install it from nodejs.org, then quit and reopen Claude.
A link I know I saved isn't found
It may be in the Archive, so ask your agent to include archived links. Folder names also have to match exactly, so ask it to list your folders first.
Technical reference
| Item | Value |
|---|---|
| Endpoint | POST http://127.0.0.1:52770/mcp |
| Transport | Streamable HTTP. Every reply is a single JSON response with no event stream, so GET returns 405. |
| Authentication | Authorization: Bearer <access key> on every request. |
| Protocol versions | 2025-06-18, 2025-03-26, 2024-11-05 |
| Methods | initialize, ping, tools/list, tools/call. Notifications get 202 Accepted. |
| Server name | snaggy |
| Request size | Up to 4 MB. |
Test it from Terminal
This lists Snaggy's tools. If it prints JSON, the server is running and your key works.
curl -s http://127.0.0.1:52770/mcp \
-H "Authorization: Bearer YOUR_ACCESS_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Email us with the app you're connecting and what you see. A person replies.