MCP Server Project (Proof of Concept) について
BayernCloud Tourismus API を通じてバイエルンの観光情報を扱う MCP サーバーです。イベント、ツアー、観光地、飲食店の検索に加え、分類や位置情報の機能を備えています。
主な機能
- 01場所や条件を指定したイベント検索
- 02ツアーの絞り込みと標高プロファイル取得
- 03観光地と飲食店の検索
- 04項目の詳細と分類の取得
- 05住所と座標の相互変換
- 06車での距離と直線距離の計算
活用シーン
- 01期間とエリアを指定してイベントを探す
- 02距離や標高差でハイキングコースを絞る
- 03座標周辺の観光地や飲食店を探す
- 04住所を座標に変換して距離を見積もる
MCP 対応
BayernCloud Tourismus API の検索、詳細、分類、位置情報機能をツールとして MCP クライアントに公開します。API トークンはサーバー側に保持されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
BayernCloud MCP Server
Model Context Protocol (MCP) サーバーです。BayernCloud Tourismus API を Claude などの AI アシスタントに公開します。バイエルン州の観光データ(イベント、ツアー、POI、飲食店)を検索、絞り込み、地理情報ツールで利用できます。
ツール
検索
| ツール | 説明 |
|---|---|
search_events | 地理的な半径、期間、全文検索、分類でイベントを検索します |
search_tours | 距離、標高差(Höhenmeter)、所要時間、周回コースの条件でツアーを検索します |
search_pois | 地理情報、全文検索、分類で観光スポットを検索します |
search_gastronomy | 地理情報、全文検索、分類でレストラン、カフェ、バーを検索します |
詳細
| ツール | 説明 |
|---|---|
get_item | UUID を指定して、あらゆる項目の詳細を取得します |
get_elevation_profile | ツアーの標高プロフィール(Höhenprofil)を取得します |
分類
| ツール | 説明 |
|---|---|
list_classification_trees | 利用可能なすべてのカテゴリツリー(30 分間キャッシュ) |
get_classifications | ツリー内のカテゴリ。検索結果の絞り込みには ID を使用します |
ユーティリティ
| ツール | 説明 |
|---|---|
suggest | イベント、ツアー、POI のタイトルを自動補完します |
geocode | 住所 → 座標 |
reverse_geocode | 座標 → 住所 |
route_distance | 2 地点間の車での距離(OSRM) |
haversine_distance | 2 地点間の直線距離 |
セットアップ
前提条件
- Node.js v18+
- BayernCloud Tourismus API トークン — bayerncloud.digital で取得してください
インストール
git clone <repo>
cd mcp-server
npm install
npm run build
設定
.env.example を .env にコピーし、値を入力します。
BCT_API_TOKEN=your_token_here
BAYERN_CLOUD_API_URL=https://data.bayerncloud.digital/api/v4
# Endpoint UUIDs — copy from the end of the endpoint URL in the BayernCloud portal
BCT_ENDPOINT_EVENTS=107df2c2-ff3e-4eaa-b24c-863d85d505d1
BCT_ENDPOINT_TOURS=cd177e6a-c6db-4efd-84a6-decf4a3711de
BCT_ENDPOINT_POIS=7b228c8c-23f5-49b9-b55e-e18e73386fbb
BCT_ENDPOINT_GASTRONOMY=5453abda-5e76-43f0-acdf-4855c3cb351e
# Geocoding (optional — defaults shown)
NOMINATIM_BASE_URL=https://nominatim.openstreetmap.org
OSRM_BASE_URL=http://router.project-osrm.org
使用方法
ローカル(Claude Desktop)
claude_desktop_config.json に追加します。
{
"mcpServers": {
"bayerncloud-mcp": {
"command": "node",
"args": ["/path/to/mcp-server/dist/index.js"]
}
}
}
パブリック HTTP サーバー
サーバーはパブリック HTTP エンドポイントとしても実行できます(Streamable HTTP トランスポート。IP ごとに 1 分あたり 60 リクエストまでに制限)。
PORT=3000 npm run start:http
エンドポイント:
POST /mcp— MCP エンドポイントGET /health— ヘルスチェック
リモート MCP サーバーとして Claude に追加します。
{
"mcpServers": {
"bayerncloud-mcp": {
"type": "http",
"url": "https://your-deployment.example.com/mcp"
}
}
}
Railway にデプロイ
npm run build
railway login && railway init && railway up
.env にある同じ環境変数を Railway ダッシュボードで設定します。PORT は自動的に設定されます。
開発
npm run build # compile TypeScript → dist/
npm run start # run stdio server (local)
npm run start:http # run HTTP server (public)
npm run dev # watch mode
アーキテクチャ
src/
index.ts # stdio entry point (Claude Desktop)
server-http.ts # HTTP entry point (public deployment)
lib/
create-server.ts # registers all tools on an McpServer instance
bct.ts # BayernCloud API client
config.ts # environment variables + dotenv
format.ts # response formatters (strips JSON-LD overhead)
cache.ts # TTL cache for classification data
nominatim.ts # Nominatim + OSRM client
tools/
events.ts # search_events
tours.ts # search_tours
pois.ts # search_pois
gastronomy.ts # search_gastronomy
item.ts # get_item
elevation.ts # get_elevation_profile
classifications.ts # list_classification_trees, get_classifications
suggest.ts # suggest
geocoding.ts # geocode, reverse_geocode, route_distance, haversine_distance
BCT API トークンがクライアントに公開されることはありません。ローカルデプロイとパブリックデプロイのどちらでも、トークンはサーバー側に保持されます。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。