Installation
Wire Bowmark into ChatGPT, Claude Code, Cursor, Codex, or any MCP client. No account, no API key.
Bowmark's hosted MCP is at https://api.bowmark.ai/mcp. It needs no auth, so
every path below is a config change and nothing else.
You do not need an account to start
Anonymous calls are capped per IP. A key raises the cap and unlocks runs on sites that need you signed in — it is additive everywhere, never a gate on getting started. See API keys at the bottom.
ChatGPT
Go to chatgpt.com/plugins and click the + in the top right.
If the option is missing, turn on Developer mode first: Settings → Apps & Connectors → Advanced. The free tier works.
Name it Bowmark, choose Server URL, and paste:
https://api.bowmark.ai/mcpSet No Auth, tick the confirmation box, and hit Create.
On the next screen, hit Connect.
In a chat, type @ and pick Bowmark from the list. Then ask away.
In ChatGPT you must type @Bowmark every turn
A custom connector is never invoked on a bare prompt. It is inert until you attach it for that turn, no matter how the tools are described or which plan you are on — this is documented, intended OpenAI behaviour, not something wording can fix. If you do not attach it, the model does not even see that Bowmark exists, and will browse or answer from memory instead.
Only Apps reviewed and listed in OpenAI's App Directory surface on their own. Custom connectors are excluded from that.
Claude Code
claude mcp add bowmark --transport http https://api.bowmark.ai/mcpRun it from any terminal. Every project picks Bowmark up automatically — there is no per-project step.
Unlike ChatGPT, you do not have to name it. The tools are in scope on every turn and Claude reaches for them on its own when a task needs the live web. Saying "use bowmark to…" just makes it deterministic when you want a specific call.
Want the skill bundled in as well? Use the Plugin path below — one install wires the MCP and the skill.
Plugin — the all-in-one path
One install pulls the skill and wires the MCP, and Bowmark shows up in the host's plugin list. This is the recommended path on Claude Code and Codex.
claude plugin marketplace add bowmark-ai/plugin
claude plugin install bowmark@bowmark-aiEvery project picks it up automatically — there is no per-project step.
codex plugin marketplace add bowmark-ai/pluginThen run codex /plugins and install Bowmark from the list.
Every other host
Same server, same URL, no auth.
Edit ~/.codex/config.toml, or run codex mcp to manage servers. No auth required:
[mcp_servers.bowmark]
url = "https://api.bowmark.ai/mcp"Settings → MCP → Add new MCP server, then paste:
{
"mcpServers": {
"bowmark": { "url": "https://api.bowmark.ai/mcp" }
}
}Launch the app (or open claude.ai) and go to Settings → Connectors.
Click Add custom connector.
Name it Bowmark and paste this URL:
https://api.bowmark.ai/mcpSome hosts only speak stdio — browser-use, and many self-built Python or Node agents.
bowmark-mcp on PyPI bridges stdio to the same hosted MCP. Same tools, no auth.
Needs uv.
{
"mcpServers": {
"bowmark": { "command": "uvx", "args": ["bowmark-mcp"] }
}
}No Python toolchain? The same bridge ships on npm:
{
"mcpServers": {
"bowmark": { "command": "npx", "args": ["@bowmark/mcp"] }
}
}For browser-use, register it with the stock MCP client:
from browser_use.mcp.client import MCPClient
bowmark = MCPClient(server_name="bowmark",
command="uvx", args=["bowmark-mcp"])
await bowmark.connect()
await bowmark.register_to_tools(tools)Works with Windsurf, Perplexity, and any MCP-capable client. Hand your agent this prompt and it wires the connection itself:
Connect the Bowmark MCP at https://api.bowmark.ai/mcp.
No auth required. After it's connected, call the
`get_library` tool before browsing any site.Skill only
For a host that supports the standard skill format but has no MCP client. Works with Claude Code, Claude Desktop, Cursor, Codex, and Windsurf.
npx skills add bowmark-ai/skillNothing installed at all
An agent with a shell or a fetch tool needs no install. Point it at the bootstrap document and it can use Bowmark immediately over plain HTTP:
https://bowmark.ai/skill.mdThat page teaches the api.bowmark.ai/v1/* loop and then offers install as an
upgrade. Two discovery URLs resolve to the same thing:
npx skills add https://bowmark.ai
claude plugin marketplace add https://bowmark.ai/marketplace.jsonA skill should ask before it installs itself
Bowmark's own skill tells the agent to ask before writing to your agent configuration. Silently editing a user's config is the behaviour that gets this whole pattern classified as a prompt-injection payload. If you are building something similar, ship the consent line.
Verify it works
Ask your agent to run this. It touches no site and costs nothing:
const library = await get_library({ query: "flights" });An unrecognized query returns a one-line index of the whole library rather than an error, so this check can never dead-end. If you get a library back, you are wired up.
In ChatGPT, type @ and pick Bowmark first — otherwise the model has no idea the
tool exists and will answer from memory or browse instead. Everywhere else the tools
are in scope on every turn.
Then read How it works for the two-call flow, and Scripting for the language you write against the library.
API keys
A key is additive. Anonymous requests omit the Authorization header and get a
per-IP cap; keyed requests include it and draw on your plan budget.
curl -s https://api.bowmark.ai/v1/library?query=flights \
-H "Authorization: Bearer $BOWMARK_API_KEY"Create one at the dashboard. Keys are shown once, at creation, and stored hashed — there is no way to read one back later.
Two things a key unlocks beyond the cap:
- Runs that pause for a login. A script that hits a signed-in site returns
status: "needs_user"with a single-use handoff URL. Without a key you are told to add one instead of being handed the link. - Metered billing. 1,000 calls a month are free; past that it is $5 per 1,000.