Skip to main content

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_client is 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 an ask synthesis.
  • 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=p source code is registered in apps/api/src/mcp-sources.ts + mcp-registry/sources.json (PyPI stdio bridge channel).
  • The mcp-name: ai.bowmark/bowmark line 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.toml when 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)

  1. cd packages/mcp-stdio && uv build
  2. uv publish (needs the PyPI token; mirror it to 1Password when minted).
  3. After the package is live, add a packages entry (registryType pypi, identifier bowmark-mcp, transport stdio) to mcp-registry/server.json and republish — the registry validates ownership via the mcp-name marker above, so it must come AFTER the PyPI publish. See mcp-registry/README.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bowmark_mcp-0.1.0.tar.gz (60.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bowmark_mcp-0.1.0-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

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

Hashes for bowmark_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1b12b3b15269673453d0d0ae659b09b798af46d62ee68e6319d8d1745fd160f1
MD5 ddae131b2fd2cef672a31ab3df8f2359
BLAKE2b-256 b185eb70ac0a727603f0f556e75948c479f14e76a2f23605d86935accfa42cfc

See more details on using hashes here.

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

Hashes for bowmark_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 231ea7b74d85b6b7b6fbc5e748929d85aa75b44edca124c7ccc22f2f991272e3
MD5 ceb25f6acf5e67e892660b52c595cc7e
BLAKE2b-256 be1c30f54179b7275eb64aa0dfd06539ca749e07c35bfc8482dddf211e006f8b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page