
Bike Router
io.github.JonasHeinickeBio由 GitHub 账号 JonasHeinickeBio 发布v0.3.0更新于 Oct 29, 2026
Plan bike routes with a self-hosted OSM service: facts only, with weather and sights.
发布方自己的服务:370.ai — AI Gateway: 100+ Chat Models, Image & Speech Generation
概览
连接自建 pyBikeRouter API 的 MCP 服务器,可规划基于 OSM 的骑行路线,并附带天气、景点与 GeoJSON/GPX 导出。
- 可以做什么
- 按地名或坐标规划骑行路线,可指定车型与约束条件
- 获取带评分、距离、爬升与警告的多条候选路线及仅陈述事实的说明
- 将路线导出为 GeoJSON 或 GPX,并查找路线附近的景点
- 按出发时间提供沿途天气预报
- 地名有歧义时请求澄清,而不是猜测位置
- 适用场景
- 当你已自行运行 pyBikeRouter 服务,并希望助手在对话或代理流程中规划、比较和解释骑行路线(含天气与景点)时使用。
- 运行要求
- 通过 uvx 从 bike-router PyPI 包启动的本地进程,并需要一个正在运行的 pyBikeRouter API,其地址由 BIKE_ROUTER_API_URL 指定。该 API 通常还需要 openrouteservice API 密钥(ORS_API_KEY)以及用于地理编码的网络访问。
安装
在 SourceWeft 中
- 打开 控制台中的 Bike Router,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
bike-routing-agent
An OSM-based bike-routing service: a typed, provider-neutral domain model, a full openrouteservice API client plus routing adapter, and a LangGraph workflow that turns a validated route request into an explainable, exportable cycling route.
The LLM (where used) may parse free text, ask clarification questions, and explain a chosen route. It never invents coordinates, geometry, elevation, or route suitability -- all of that comes from OSM-derived routing engines.
Easy install (no programming needed)
Download pybikerouter-easy-<version>.zip from the
Releases page, unzip it, install
Docker Desktop, and double-click the Start
file for your computer. The first start asks one question -- where you ride -- downloads that
area's map data, and opens the planner in your browser. Step by step, in plain words:
docs/easy-install.md (and START-HERE.txt in the download).
Documentation
The full documentation suite lives in docs/:
Architecture
Graph branches:
Every path ends with an explicit status; the graph never calls a routing
provider unless validation and geocoding both succeeded, and it never
returns without a terminal status.
Setup
Requires Python 3.11+ and Poetry.
poetry install creates an in-project virtualenv (.venv/, see
poetry.toml) with both runtime and dev dependencies. Run any command
inside it with poetry run <command>, or poetry shell to activate it
directly.
Edit .env and set ORS_API_KEY to a valid
openrouteservice API key.
Environment variables
Running the API
The app also serves a built-in web UI (map-based route planner) at
http://localhost:8000/, with the interactive API docs at /docs.
Command-line interface
Installing the package exposes a bike-router command (also runnable as
python -m bike_routing_agent.cli) organised into subcommand groups:
Everything the API and the web form do is available from the CLI -- see docs/cli.md.
route plan --text "50 km gravel loop from Braunschweig" uses the optional LLM parser (docs/llm-parser.md).
route plan accepts lat,lon pairs or place text for --origin,
--destination and repeated --via waypoints, prints the JSON result and
exits 0 on ready, 1 on clarification/provider failure, 2 on usage
errors. With DATABASE_URL set it also records the plan in the route history
(best effort; plan_id in the output, --no-record to skip), a forecast along
the route at --departure-time (docs/weather.md), and
bike-router db migrate / db status manage the schema
(docs/persistence.md).
Running with Docker
All container assets live in docker/:
Open http://localhost:8000/ for the web UI. Route artifacts are stored in
the named pybikerouter-exports volume. See
docs/self-hosted.md for the optional local routing /
geocoding stack -- including what it needs and how to run just one half on a
small machine.
Example request
Example response
If origin/destination are ambiguous or unresolved, status is
awaiting_clarification and clarification lists the candidate places to
choose from -- no route is generated from a guess.
Bike types
constraints.bike_type selects the routing profile per engine and defaults to
gravel. Supported values: road, gravel, touring, mountain, city,
ebike, commuter (fast, low-traffic), recumbent. ORS ships four cycling
profiles, so e.g. ebike uses cycling-electric while commuter rides on
cycling-regular; the self-hosted BRouter provider differentiates further --
gravel, touring, mountain, city, commuter and recumbent each get
their own profile, while road and ebike share fastbike (BRouter has no
e-assist cost model) (see docs/configuration.md).
Make targets
make lists the everyday commands; they use the project's .venv (or the active environment):
Linting and type checking
Both run in CI on every push and pull request (see
.github/workflows/ci.yml).
Running tests
Coverage is collected on every run and the suite fails below 80%
(--cov-fail-under=80 in tool.pytest.ini_options.addopts; currently 97%
total, every module ≥84%).
Live tests that hit real external services are marked @pytest.mark.live
and excluded by default (see tool.pytest.ini_options.addopts in
pyproject.toml). Run them explicitly with:
Pre-commit hooks
Quality gates run automatically before each commit/push via
pre-commit. Install both git hook stages once after
poetry install:
On commit it runs whitespace/EOF/YAML/TOML/merge-conflict/large-file checks,
ruff check --fix and mypy src; the full pytest suite runs only in the
pre-push stage on git push (mirroring CI). Run the commit stage manually
with poetry run pre-commit run --all-files and the pre-push stage with
poetry run pre-commit run --hook-stage pre-push --all-files.
Known limitations
- OSM tag completeness varies by region; surface/access metadata is frequently missing and is represented as uncertainty, not treated as favorable.
- Routing engines (ORS, Valhalla, BRouter) map bike categories to their own
profiles differently; the mapping in
config.pyis an approximation, especially for gravel riding. - Elevation data (ascent/descent) varies in accuracy between providers and is not always available.
- No route produced by this service is a safety guarantee. Explanations use hedged language ("better aligned with available map metadata") rather than claims like "safe route".
- BRouter and Valhalla are wired up end to end but only against
self-hosted deployments (
ROUTING_PROVIDER=brouter/valhalla/all, BRouter via the compose profile in docker/brouter/README.md), and openrouteservice remains the default engine. - The Pelias geocoder option needs a Pelias API served at
<ORS_BASE_URL>/pelias/v1: neither the publicapi.openrouteservice.orgnor a stock self-hosted ORS provides one, and the adapter has only been tested against mocks (see docs/geocoding.md). For a local geocoder use the self-hosted Nominatim.
Repository layout
Licence
MIT, see LICENSE.
Third-party licences
BRouter (MIT) and the OpenStreetMap data (ODbL) this project builds on are credited, with the full BRouter licence text, in THIRD_PARTY_LICENSES.md.
来源:README.md,提交 bc2d1da
工具
0版本历史
1- v0.3.0最新Oct 29, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
其他 Router 集成
370.ai — AI Gateway: 100+ Chat Models, Image & Speech Generation
ai.router官方发布者
远程 AI 网关 MCP 服务器,让助手用一个 370.ai API 密钥调用 100 多个聊天模型、生成图片并把文字转为语音。

AI Media Router
由 GitHub 账号 jutsuhq 发布
本地 MCP 服务器,用你自己的 API 密钥通过 40 多家供应商生成图片和视频,支持比价和可搜索的本地素材库。

Uniswap Universal Router Decoder
由 GitHub 账号 Elnaril 发布
本地 MCP 服务器,用于解码和编码 Uniswap Universal Router 的 V2、V3、V4 调用数据,只读,不签名也不发送交易。

x402 Router
由 GitHub 账号 camerxnduff 发布
只读 MCP 服务器,可搜索经探测的 x402 按次付费端点注册表,并为助手路由到评分最高的端点。

GenPark Consistent Hash Ring Router
由 GitHub 账号 alphaparkinc 发布
一个本地 MCP 服务器,提供带虚拟节点的一致性哈希环,用于分布式 LLM 缓存路由与智能体分区。