Bowmark MCP over stdio — a thin bridge to the hosted Bowmark MCP at https://api.bowmark.ai/mcp
Project description
bowmark-mcp — Bowmark MCP over stdio
Bowmark gives agents pre-computed navigation recipes for public websites (skip
explore-and-discover). The canonical server is hosted, streamable HTTP, no auth
required: https://api.bowmark.ai/mcp.
This package is a thin stdio bridge to that hosted server, for MCP hosts
whose client only speaks stdio (for example browser-use's MCPClient). Tool
schemas, descriptions, and results pass through verbatim — the hosted server
stays the single source of truth; nothing is reimplemented here.
mcp-name: ai.bowmark/bowmark
Use
uvx bowmark-mcp # or: pipx run bowmark-mcp / python -m bowmark_mcp
Example — browser-use:
from browser_use.mcp.client import MCPClient
bowmark = MCPClient(server_name="bowmark", command="uvx", args=["bowmark-mcp"])
Example — any MCP host config:
{ "mcpServers": { "bowmark": { "command": "uvx", "args": ["bowmark-mcp"] } } }
If your host speaks streamable HTTP, skip this bridge and connect directly to
https://api.bowmark.ai/mcp.
Environment
| Var | Meaning |
|---|---|
BOWMARK_MCP_URL |
Target MCP URL. Default https://api.bowmark.ai/mcp?s=p (?s=p attributes the install to the PyPI bridge). Point at http://localhost:3001/mcp for a local Bowmark API. |
BOWMARK_API_KEY |
Optional. Forwarded as X-Bowmark-Key; a free key (bowmark.ai dashboard) raises the anonymous per-IP daily synthesis cap to your plan budget. |
Design notes (repo-internal)
- One remote session per request, retried once.
streamablehttp_clientis an anyio-scoped context manager; holding one session across handler tasks trips "exit cancel scope in a different task". The hosted MCP is stateless, so a fresh session per request is semantically identical and costs one initialize round-trip — noise next to anasksynthesis. - Pass-through only. No tool logic lives here; the agent-surfaces sync rule
in the root CLAUDE.md is unaffected because descriptions/schemas ride through
from
apps/api/src/routes/mcp.ts. ?s=psource code is registered inapps/api/src/mcp-sources.ts+mcp-registry/sources.json(PyPI stdio bridge channel).- The
mcp-name: ai.bowmark/bowmarkline above is load-bearing: the official MCP Registry validates PyPI package ownership by finding that marker in the package README. Don't remove it. - Versioning is manual (this is a thin bridge, not the api): bump
pyproject.tomlwhen it changes. Not wired into release-please.
Tests
cd packages/mcp-stdio
uv run --with pytest --with-editable . pytest -q
Network-free (the remote hop is monkeypatched). A live smoke against prod:
uv run --with-editable . python - <<'EOF'
import asyncio, bowmark_mcp
async def main():
tools = await bowmark_mcp.list_tools_impl()
print([t.name for t in tools])
asyncio.run(main())
EOF
Publishing to PyPI (manual, Christopher)
cd packages/mcp-stdio && uv builduv publish(needs the PyPI token; mirror it to 1Password when minted).- After the package is live, add a
packagesentry (registryTypepypi, identifierbowmark-mcp, transportstdio) tomcp-registry/server.jsonand republish — the registry validates ownership via themcp-namemarker above, so it must come AFTER the PyPI publish. Seemcp-registry/README.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bowmark_mcp-0.1.0.tar.gz.
File metadata
- Download URL: bowmark_mcp-0.1.0.tar.gz
- Upload date:
- Size: 60.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b12b3b15269673453d0d0ae659b09b798af46d62ee68e6319d8d1745fd160f1
|
|
| MD5 |
ddae131b2fd2cef672a31ab3df8f2359
|
|
| BLAKE2b-256 |
b185eb70ac0a727603f0f556e75948c479f14e76a2f23605d86935accfa42cfc
|
File details
Details for the file bowmark_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bowmark_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
231ea7b74d85b6b7b6fbc5e748929d85aa75b44edca124c7ccc22f2f991272e3
|
|
| MD5 |
ceb25f6acf5e67e892660b52c595cc7e
|
|
| BLAKE2b-256 |
be1c30f54179b7275eb64aa0dfd06539ca749e07c35bfc8482dddf211e006f8b
|