
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 快取路由與代理程式分區。