HCM-LLM MCP Server
FastAPIベースのModel Context Protocol (MCP)サーバーで、Highway Capacity Manual (HCM)の解析と交通工学計算を提供します。現時点では、このサーバーはHCM第15章の方法論に従った包括的な2車線道路解析を提供します。
特徴
HCMドキュメントのセマンティック検索
HCM第15章(2車線道路)と第12章(基本フリーウェイ区間)の完全な解析
HCM全章(第10章から第28章)を、3つのケイパビリティツール(
hcm_analyze、hcm_describe、hcm_validate)を通じて、33のメソッドにわたってカバーしています。各メソッドはライブラリ独自のサンプルケースJSONを受け取り、公開された例題に対して検証済みです。HCM/AASHTOの制約に対する入力検証ゲートウェイ(
transportations-validator経由)全文書コーパス検証(HCM/AASHTO/MUTCD/HSM/ADA/...にわたる300以上のルール)。引用付き、地形・文脈でゲートされたルール、明確化リクエストに対応 — プロセス内で実行され、データベース不要です。
ナレッジグラフ推論:アブダクションによる設計修正(2車線道路および基本フリーウェイ区間)、反証可能なコード整合、逆設計、前方/後方連鎖 — すべての修正候補は検証済みライブラリを通じて再実行されます。
YAMLベースの関数レジストリによる容易な拡張性
15以上の交通解析関数を備えた関数呼び出しインターフェース
AIアシスタント(Claude対応)との統合のためのMCPサーバー互換性
直接アクセスのためのRESTful APIエンドポイント
レジストリに基づく動的エンドポイント生成
包括的なテストスイートと検証ツール
Related MCP server: MCP WebAnalyzer
リモートMCPサーバーへの接続
このサーバーは、Claude DesktopなどのAIコードエージェントのバックエンドとして使用でき、複雑な交通解析を実行し、HCMドキュメントに動的にアクセスできるようにします。
この機能を有効にするには、サーバーをAIアシスタントの設定にMCPサーバーとして追加してください。
Claude Desktopユーザー向け
ユーザー設定でConnectorsタブを見つけ、Add custom connectorをクリックします。
次に、https://api.hcm-calculator.com/mcp をClaude設定に追加します。
VSCode上のGitHub Copilotユーザー向け
このサーバーは、カスタムMCPサーバーとして設定することで、GitHub Copilotでも使用できます。
これを行うには、Ctrl+pを押してMCP: Open User Configurationを選択し、mcp.jsonに次のように変更します:
{
"servers": {
"hcm-mcp": {
"url": "https://api.hcm-calculator.com/mcp"
}
}
}ローカルMCPサーバーへの接続
開発やテスト目的で、このサーバーをローカルで実行することもできます。
uv venv
# Windows
.venv\Scripts\activate
# Linux
source .venv/bin/activate
uv pip install .その後、サーバーを実行します。
# Setup the database.
python hcm_mcp_server/scripts/import_hcm_docs.py
# Start the server.
python mcp_server_fastapi.pyClaude Desktopユーザー向け
Claude Desktopを開き、URL http://localhost:8000/mcp でサーバーをカスタムMCPサーバーとして追加します。
Claude Desktopの設定(claude_desktop_config.json)に追加します:
注記: 最近このjson設定は機能していないようです(https://github.com/anthropics/claude-code/issues/4188)。私のデスクトップ環境でも機能しませんでした。
{
"mcpServers": {
"hcm-mcp-local": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}VSCode上のGitHub Copilotユーザー向け
上記と同様に、このサーバーをカスタムMCPサーバーとして設定することで、GitHub Copilotで使用できます。
これを行うには、Ctrl+pを押してMCP: Open User Configurationを選択し、mcp.jsonに次のように変更します:
{
"servers": {
"hcm-mcp-local": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}その後、コードエディタで関数呼び出しインターフェースを直接使用できます。
プロジェクト構造
hcm-mcp-server/
├── mcp_server_fastapi.py # Main FastAPI application
├── functions_registry.yaml # Function registry configuration
├── hcm_mcp_server/
│ ├── example_prompts/
│ │ ├── *.txt # Example prompts for function calling
│ │ └── *.json # Example json files for web validation
│ ├── core/ # Core application modules
│ │ ├── dependencies.py # Dependency injection and utilities
│ │ ├── registry.py # Function registry implementation
│ │ ├── models.py # Pydantic data models
│ │ └── endpoints.py # Dynamic endpoint creation
│ ├── functions/
│ │ ├── chapter15.py # Chapter 15: Two-Lane Highways
│ │ └── research.py # Research and documentation
│ └── scripts/
│ ├── import_hcm_docs.py # Import HCM documentation and setup ChromaDB
│ └── validate_registry.py # Registry validation
├── data/
│ └── hcm_files/ # HCM documentation files
└── chroma_db/ # ChromaDB storage
設定
環境変数
.env.exampleに基づいて.envファイルを作成します。次の内容をコピーして貼り付けるか、cp .env.example .envを実行します:
CHROMA_DB_PATH=./chroma_db
HOST=127.0.0.1
PORT=8000
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:3001
LOG_LEVEL=INFO
DB_MODE=local
PUBLIC_SUPABASE_URL=https://
PUBLIC_SUPABASE_API=your-anon-key / service-role-key関数レジストリ
関数はfunctions_registry.yamlで定義されています:
functions:
chapter15:
identify_vertical_class:
module: "functions.chapter15"
function: "identify_vertical_class_function"
description: "Identify vertical alignment class range"
category: "transportation"
chapter: 15
step: 1
parameters:
type: "object"
properties:
segment_index:
type: "integer"
highway_data:
type: "object"
required: ["segment_index", "highway_data"]アブレーションアーム(制限付きMCPサーフェス)
Table 5 / Figure 7の2x2アブレーションでは、同じアプリをツールのサブセットのみを公開して起動できるため、各条件を単独でモデル評価できます:
python mcp_server_fastapi.py # ct : full system (all tools), port 8000
python mcp_server_kg_only.py # kg : 7 reasoning/validation tools only, port 8001 (no Chroma needed)
python mcp_server_rag_only.py # rag : query_hcm only, port 8002両方のランチャーは、アプリをインポートする前に2つの環境変数を設定する薄いラッパーです:
HCM_MCP_INCLUDE_OPS— MCPサーフェスが公開する操作IDのカンマ区切りリスト(未設定 = すべて)。フィルタリングにはFastApiMCP(include_operations=...)を使用します。HCM_ENABLE_RAG—falseに設定すると、埋め込みモデルとベクトルストアの読み込みをスキップします(kgのみのアームにはどちらも不要です)。
各VS Code / Claude Desktop MCPクライアントを、テスト対象アームのポート(例:kgのみの場合はhttp://localhost:8001)に向けます。これにより、モデルはそのアームのツールのみを認識します。baseアームは、単にMCPサーバーを接続しない状態です。
APIの使用法
完全な高速道路解析
curl -X POST "http://localhost:8000/analysis/chapter15/complete" \
-H "Content-Type: application/json" \
-d '{
"segments": [{
"passing_type": 0,
"length": 2.0,
"grade": 2.0,
"spl": 50.0,
"volume": 760.0,
"volume_op": 1500.0,
"phf": 0.95,
"phv": 5.0
}],
"lane_width": 12.0,
"shoulder_width": 6.0,
"apd": 5.0
}'関数呼び出しインターフェース
curl -X POST "http://localhost:8000/tools/call" \
-H "Content-Type: application/json" \
-d '{
"function": {
"name": "chapter15_determine_free_flow_speed",
"arguments": {
"segment_index": 0,
"highway_data": {
"segments": [{"passing_type": 0, "length": 2.0, "grade": 2.0, "spl": 50.0}],
"lane_width": 12.0,
"shoulder_width": 6.0
}
}
}
}'利用可能な関数の一覧
# List all functions
curl -X POST "http://localhost:8000/tools/list"
# Filter by category
curl -X POST "http://localhost:8000/tools/list" \
-H "Content-Type: application/json" \
-d '{"category": "transportation"}'
# Filter by chapter
curl -X POST "http://localhost:8000/tools/list" \
-H "Content-Type: application/json" \
-d '{"chapter": 15}'HCMドキュメントのクエリ
curl -X POST "http://localhost:8000/tools/query-hcm" \
-H "Content-Type: application/json" \
-d '{
"question": "What factors affect free flow speed in two-lane highways?",
"top_k": 5
}'利用可能な関数
第15章の関数
chapter15_identify_vertical_class- ステップ1:縦断線形クラスの範囲を特定chapter15_determine_demand_flow- ステップ2:需要交通流率と容量を計算chapter15_determine_vertical_alignment- ステップ3:縦断線形の分類を決定chapter15_determine_free_flow_speed- ステップ4:自由走行速度を計算chapter15_estimate_average_speed- ステップ5:平均旅行速度を推定chapter15_estimate_percent_followers- ステップ6:追従車両の割合を推定chapter15_determine_follower_density_pl- ステップ8a:追越車線の追従密度chapter15_determine_follower_density_pc_pz- ステップ8b:PC/PZ区間の追従密度chapter15_determine_segment_los- ステップ9:区間のサービス水準を計算chapter15_determine_facility_los- ステップ10:施設全体のサービス水準を計算chapter15_complete_analysis- HCM第15章の手順全体を実行
第12章の関数(基本フリーウェイ区間)
第15章とは異なる方程式群です — lane width -> FFS -> capacity/speed -> density -> LOSの連鎖。transportations-library>=0.1.12が必要です。
chapter12_determine_free_flow_speed- ステップ2:自由走行速度を推定・調整chapter12_estimate_capacity- ステップ3:基本容量と調整容量(pc/h/ln)chapter12_estimate_demand_volume- ステップ4:車線あたりの交通流率 v_pchapter12_calculate_speed- ステップ5a:速度-交通流曲線による空間平均速度chapter12_estimate_density- ステップ5b:密度 D = v_p / Schapter12_determine_segment_los- ステップ6:区間のサービス水準chapter12_complete_analysis- HCM第12章の基本フリーウェイ手順全体を実行
HCM解析ケイパビリティ(全章カバー)
計算ライブラリが実装するすべてのHCMメソッド(第10章から第28章)を、3つのケイパビリティツールの背後にまとめています。メソッドはツールではなく引数です。33個のほぼ同一のスキーマは、すべての呼び出し元のコンテキストを消費し、ツール選択を鈍らせるため、上記の10個の公開ツールはすでにケイパビリティ型になっています。
hcm_analyze—{method, config}。1つのメソッドを実行します。ツールの説明にはメソッドカタログが各1行の簡潔な形式で含まれ、methodは33個のIDのenumです。hcm_describe—{method?}。メソッドを指定した場合:その入力スキーマの概要、結果フィールドの意味、およびそれを検証する例題フィクスチャを返します。指定しない場合:カタログ、各メソッドIDとその章、および1行の要約を返します。これを最初に呼び出してください。呼び出し元がRustバインディングを読まずにメソッドの形状を把握する方法です。hcm_validate—{method, config}。解析を実行せずに設定を解析・チェックし、ライブラリ独自の検証エラーまたはokを返します。設定の反復には、完全な解析ではなくパースのみのコストがかかります。33のメソッドのうち24は、コンストラクタの背後に実際の検証ステップがあります(serdeデシリアライゼーション、コンストラクタの範囲チェック、第15章ではtl.validate_inputによるExhibit 15-8のパラメータ範囲)。残りの9つは、ライブラリ内の単一のJSONエントリポイントであり、パースと計算が1回の呼び出しで行われます。これらのメソッドは、解析を実行して検証と呼ぶのではなく、その旨をレスポンスに明記します。
入力は常に計算ライブラリ独自のサンプルケース(フィクスチャ)JSONであり、configとして渡されます — MCPレイヤー用に考案された2番目のフラット化スキーマではありません。transportations-library/tests/ExampleCases/hcm/のサンプルケースは、そのまま渡すことができます。transportations-library>=0.3.7が必要です。
章 |
| 計算内容 |
10 |
| フリーウェイ施設(第25章エンジン) |
10 |
| マネージドレーン・フリーウェイ施設 |
11 |
| フリーウェイの旅行時間信頼性 |
12 |
| 基本フリーウェイおよび多車線区間 |
13 |
| フリーウェイ織り込み区間(HCM 7および7.1) |
14 |
| フリーウェイ合流・分流区間(HCM 7および7.1) |
15 |
| 2車線および多車線道路区間、自転車モード |
15 |
| 2車線道路施設 |
16 |
| 都市街路施設 |
17 |
| 都市街路の旅行時間信頼性 |
18 |
| 都市街路区間、自転車モード |
18 |
| 都市街路区間、歩行者モード |
18 |
| 都市街路区間、公共交通モード |
18 |
| 都市街路区間、自動車モード |
19 |
| 信号交差点、自動車モード |
19 |
| 信号交差点、自転車モード |
19 |
| 信号交差点、歩行者モード |
19 |
| 二段階歩行者横断遅れ |
20 |
| 二方向STOP制御交差点、車両 |
20 |
| TWSCおよびブロック中間横断、歩行者モード |
21 |
| 全方向STOP制御交差点 |
22 |
| ラウンドアバウト |
23 |
| RCUTおよびMUT代替交差点(Part C) |
23 |
| 変位左折交差点(Part C) |
23 |
| インターチェンジ・ランプ端末(Part B) |
24 |
| オフストリート経路、自転車モード |
24 |
| 歩行者専用歩道または階段 |
24 |
| 共用経路、歩行者モード |
25 |
| 混在交通流モデル、合成勾配 |
25 |
| 計画レベルのフリーウェイ施設 |
26 |
| 混在交通流モデル、単一勾配 |
27 |
| 織り込み区間のサービス交通量 |
28 |
| 合流・分流のサービス交通量 |
各メソッドは、計算例を hcm_mcp_server/data/examples/<method>.json に同梱しており、tests/test_methods.py は、その例題の公開値に対して、計算ライブラリ自身のテストスイートが定める許容誤差で、hcm_analyze を通じて全メソッドを駆動します。
各メソッドはまた、直接のAPI呼び出し元向けに、/analysis/hcm/<method-with-hyphens> にメソッド単位のRESTルートを保持しています。ルートはMCPツールではないため、呼び出し元のコンテキストを一切消費しません。
ドメイン外の拒否応答は、ライブラリ自身のメッセージを返します。デジタル化されていない混在交通流のグレード、ドメイン外の特定アップグレードPCE、不正な設定はすべて、ライブラリの言葉で {"success": false, "error": "..."} として返されます。これらのメッセージは、公開されているHCMデータがカバーする範囲を示しているためです。
これらのツールはデフォルトのMCPサーフェスには含まれていません。 mcp_server_fastapi.py は ct アブレーション群であり、デフォルトで公開する10個のツールが、公開された実験が実行されたサーフェスです(tests/test_frozen_surface.py を参照)。HCM_MCP_FULL_COVERAGE=true を設定すると、3つのケイパビリティツールをMCPマウントに追加できます。設定しない場合でも、RESTおよび /tools/call 経由で到達可能です。
検証関数
validation_validate_design_full- 引用付きで、設計を完全なルールコーパス(300以上のルール:HCM、AASHTO、MUTCD、HSM、ADA、OpenDRIVE、...)に対して検証します。地形・管轄区域で制御されるルール、入力が欠落している場合やそのコンテキストが曖昧な場合の明確化要求も含みます。バンドルされたシードコーパスに対してプロセス内で実行されるため、データベースは不要です。(第15章/第12章のツールはより軽量なセマンティックファイアウォールゲートウェイを使用しますが、これは完全なエンジンです。)transportations-validator>=0.2.0+sqlalchemyが必要です。
リサーチ関数
query_hcm- HCMドキュメントデータベースを照会します
推論関数
X-KG推論レイヤーは、ナレッジグラフと検証済みの実行可能基盤の上で推論します。修復と逆設計は、結果を返す前にすべての候補を transportations-library で再実行するため、結果は主張されるのではなく適合が証明されます。データベースは不要です。
reasoning_propagate_change- フォワードチェーン:変更された入力によって影響を受ける下流パラメータreasoning_diagnose_failure- バックワードチェーン:失敗しているパラメータの上流原因reasoning_repair_design- アブダクティブ修復:二車線道路(HCM第15章)に対する最小限の適合修正reasoning_repair_freeway- アブダクティブ修復:基本フリーウェイ(HCM第12章)に対する最小限の適合修正reasoning_reconcile_codes- 矛盾するコード規定の取消可能な裁定(論証トレース付き)reasoning_inverse_design- 目標指向合成:目標LOSに到達する実現可能な幾何形状
依存関係: 推論機能には
transportations-validator>=0.2.0とtransportations-library>=0.1.12が必要です(後者はreasoning_repair_freewayが使用する BasicFreeways バインディング用)。どちらもPyPIにあるため、通常のpip install(またはuv sync)で解決できます。
APIエンドポイント
APIエンドポイントディレクトリにアクセスして、分析を実行したりHCMドキュメントを照会したりできます。
注記: 詳細なAPIエンドポイントの説明のための /docs は現在構築中で、まもなく利用可能になる予定です。
コアエンドポイント
POST /tools/call- 登録済みの任意の関数を実行しますPOST /tools/list- フィルタリング付きで利用可能な関数を一覧表示しますGET /mcp/discovery- MCPケイパビリティのディスカバリ
メソッド単位のHCM分析
POST /analysis/hcm/analyze # {method, config}
POST /analysis/hcm/describe # {method?} - catalog, or one method's schema + worked example
POST /analysis/hcm/validate # {method, config} - parse and check, without running
POST /analysis/hcm/<method-with-hyphens> # method-shaped convenience route, e.g. /analysis/hcm/analyze-roundaboutメソッド単位のルートは、そのメソッドの例題スキーマに従った {"config": { ... }} を受け取ります。完全なリストについては、上記のHCM分析ケイパビリティを参照してください。
第15章の分析
POST /analysis/chapter15/complete- 完全なHCM分析POST /analysis/chapter15/segment- 単一セグメント分析
リサーチ
POST /tools/query-hcm- HCMデータベースを照会しますPOST /research/search_hcm_by_chapter- 特定の章ごとにHCMコンテンツを検索しますGET /research/get_hcm_section- 特定のHCMセクションのコンテンツを取得しますPOST /research/summarize_hcm_content- トピックに関するHCMコンテンツを要約します
推論と検証
X-KG推論レイヤーと完全コーパス検証のための専用エンドポイント(したがってファーストクラスのMCPツール)です。各エンドポイントはレジストリから実装を解決するため、サーフェスは function_registry.yaml と同期が保たれます。
POST /reason/propagate-change- フォワードチェーンによる下流への影響POST /reason/diagnose-failure- バックワードチェーンによる上流原因POST /reason/repair-design- 最小限の適合修正(二車線道路、HCM第15章)POST /reason/repair-freeway- 最小限の適合修正(基本フリーウェイ、HCM第12章)POST /reason/reconcile-codes- 取消可能な複数管轄区域の裁定POST /reason/inverse-design- 目標指向の幾何形状合成POST /validate/design-full- 引用と明確化付きで完全なルールコーパスに対して検証します
ユーティリティ
GET /health- ヘルスチェックGET /registry/info- レジストリ情報POST /registry/reload- 関数レジストリを再読み込みします
データモデル
道路セグメント
{
"passing_type": 0, # 0=PC, 1=PZ, 2=PL
"length": 2.0, # miles
"grade": 2.0, # percent
"spl": 50.0, # speed limit (mph)
"volume": 760.0, # vehicles/hour
"volume_op": 1500.0, # opposing volume
"phf": 0.95, # peak hour factor
"phv": 5.0 # percent heavy vehicles
}道路施設
{
"segments": [...], # list of segments
"lane_width": 12.0, # feet
"shoulder_width": 6.0, # feet
"apd": 5.0, # access points/mile
"pmhvfl": 0.02, # percent HV in fast lane
"l_de": 0.0 # effective passing distance
}新しいHCM章の追加
1. 関数モジュールを作成する
functions/chapter16.py を作成します:
def new_analysis_function(data: Dict[str, Any]) -> Dict[str, Any]:
"""Implementation for new analysis."""
try:
# Your implementation here
return {"success": True, "result": "analysis_result"}
except Exception as e:
return {"success": False, "error": str(e)}2. レジストリを更新する
functions_registry.yaml に追加します:
functions:
chapter16:
new_analysis:
module: "functions.chapter16"
function: "new_analysis_function"
description: "New analysis function"
category: "transportation"
chapter: 16
parameters:
type: "object"
properties:
input_param:
type: "string"
required: ["input_param"]3. サーバーを再起動する
レジストリは新しい関数を自動的に読み込みます。
開発
テストの実行
注記: テストはまもなく追加される予定です。
pytest tests/レジストリの検証
注記: まだ使用されていません。
python scripts/validate_registry.py開発データベースのセットアップ
python scripts/import_hcm_docs.pyカスタマイズ
カスタム分析モデル
core/models.py のモデルを拡張します:
class CustomAnalysisInput(BaseModel):
parameter1: float = Field(description="Custom parameter")
parameter2: str = Field(description="Another parameter")カスタム関数
適切なモジュールに関数を実装します
functions_registry.yamlに追加しますサーバーを再起動するか、
/registry/reloadを呼び出します
サポート
このプロジェクトはベータ版であり、現時点では主に研究目的です。貢献やフィードバックは大歓迎です!
問題や質問については:
GitHubでissueを開く
/docsでAPIドキュメントを確認する/registry/infoで関数レジストリを確認するユーティリティスクリプトでセットアップを検証する
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
FastMCP server for TheBrain API — AI access to a personal knowledge graph, Tollbooth-monetized
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA high-performance FastAPI server supporting Model Context Protocol (MCP) for seamless integration with Large Language Models, featuring REST, GraphQL, and WebSocket APIs, along with real-time monitoring and vector search capabilities.8MIT
- AlicenseAqualityDmaintenanceAn enterprise-grade Model Context Protocol server for high-performance web analysis that discovers subpages, provides AI-based page summaries, and extracts structured content for RAG using FastMCP and FastAPI.24MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server implementation built with FastAPI that enables AI agent interactions. Provides a structured foundation for building AI-powered applications with proper data validation and modern Python tooling.-
- FlicenseNot gradedqualityDmaintenanceA demonstration MCP server built with FastAPI that provides basic mathematical operations and greeting services. Integrates with Gemini CLI to showcase MCP protocol implementation with simple REST endpoints.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/crosstraffic/highway-capacity-manual-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server