PHONE应用API MCP服务器,使用Azure API管理

Azure API Management Basic v2 使用PHONE APPLI API 的,之MCP 服务器实现。
- Support 版本
- PHONE APPLI API 版本 v1.20
概要
此项目包括:电话应用API 的Azure API Management 而需要与环境混合的每条反射光线,进行环境采样。
主要功能:
- ✅ OpenAPI Specification (v1.20.0) 验证
- ✅ Azure API Management Basic v2 Bicep+Azure Verified Modules
- ✅ OpenAPI Spec 自动导入
- ✅ 完全自动化的部署脚本
- ✅ X-Pa-Api-Key 透明传送页眉
- ✅ 支持沙箱/生产环境切换
- ✅ MCP (Model Context Protocol) 兼容性检查和自动英语化
前提条件
- python: 3.11 以上
- 紫外线: Python 包管理器(安装方法)
- Azure命令行界面: Azure 命令行工具(安装方法)
- 疫情: YAML 处理器(安装方法)
- Azure 预订:活动Azure 预订
快速启动
1.设置环境
# リポジトリのクローン
git clone https://github.com/koudaiii/phoneappli-api-mcp-server-using-apimanagement.git
cd phoneappli-api-mcp-server-using-apimanagement
# 環境のブートストラップ(uv、Azure CLI、依存関係のインストール)
./script/bootstrap
# Azure にログイン
az login2. OpenAPI Spec 验证
./script/validate出力例:
==> Validating OpenAPI Specification...
File: /path/to/docs/v1.20.0.yaml
✓ File loaded successfully
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ OpenAPI Specification Info ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
OpenAPI Version: 3.0.3
Title: PHONE APPLI API
Version: 1.20
Paths: 45
Operations: 120
✓ Validation successful!3. Azure 部署到
# デプロイ実行(API Management 作成 + API インポート)
./script/deploy可在环境变量中自定义:
# デフォルト(サンドボックス環境)
./script/deploy
# 本番環境へのデプロイ
export ENVIRONMENT="production"
./script/deploy
# その他のカスタマイズ
export LOCATION="eastus"
export DEPLOYMENT_NAME="my-custom-deployment"
export ENVIRONMENT="production"
./script/deploy4.资源清理
./script/cleanup 项目结构
.
├── docs/
│ └── v1.20.0.yaml # PHONE APPLI API OpenAPI Specification
├── infra/ # Azure インフラストラクチャ (Bicep)
│ ├── main.bicep # メインテンプレート
│ ├── main.bicepparam # パラメータ定義
│ ├── resources.bicep # 追加リソース定義
│ ├── modules/ # カスタムモジュール
│ └── README.md # インフラドキュメント
├── script/ # 自動化スクリプト
│ ├── bootstrap # 環境セットアップ
│ ├── validate # OpenAPI バリデーション
│ ├── analyzer # API description 解析
│ ├── fix-descriptions # Description の 1000文字制限対応
│ ├── check-mcp-compatibility # MCP 互換性チェック(タグ名、operationId、summary 抽出)
│ ├── convert-to-english # OpenAPI 仕様書の英語化(MCP 対応)
│ ├── deploy # デプロイ実行
│ ├── reimport # API の再インポート
│ ├── test # API テスト
│ └── cleanup # リソース削除
├── src/ # Python 実装
│ ├── validate.py # OpenAPI バリデーションロジック
│ ├── import_api.py # API インポートロジック
│ └── __init__.py
├── tests/ # テストコード
├── pyproject.toml # Python プロジェクト設定(uv管理)
├── PLAN.md # 実装プラン
└── README.md # このファイル用法
OpenAPI Spec 验证
Python 也可以直接运行脚本:
uv run python src/validate.py docs/v1.20.0.yamlAPI Description 分析
MCP工具注册description 将条目添加到文档注册表。确认当前状态:
./script/analyzer出力例:
====================================================================================================
OpenAPI 仕様書解析結果: ./docs/v1.20.0.yaml
検出されたエンドポイント数: 45
====================================================================================================
📊 統計情報:
📝 総エンドポイント数: 45
⚠️ 1000文字超過: 0 個
📏 最大記述文字数: 992
📏 最小記述文字数: 17
📏 平均記述文字数: 453.9Description 修改
超过1000个字符description 自动缩短到950个字符(保留信息):
./script/fix-descriptions此脚本为:
- 超过1000个字符description 减少到950个字符
- 保留重要信息(参数、功能和限制)
- YAML完全保留结构(使用yq)
MCP 兼容性检查
OpenAPI 仕样书のMCP (Model Context Protocol) 互换性を确认:
./script/check-mcp-compatibility出力例:
=====================================================================================================
MCP互換性チェック: ./docs/v1.20.0.yaml
=====================================================================================================
📊 統計情報:
総タグ数: 11
総エンドポイント数: 45
🔍 抽出結果:
[1] タグ名一覧
• internal-contacts
• profiles
• departments
...
[2] operationId一覧
• list_internal_contacts
• create_internal_contact
• get_internal_contact
...
[3] summary一覧 (MCP Tools Name)
• List Internal Contacts
• Create Internal Contact
• Get Internal Contact
...
=====================================================================================================
✓ 抽出完了
=====================================================================================================此脚本为:
- 提取标记名称(在MCP中ASCII 需要字符)
- operationId (建议使用snake_case)
- summary 提取(MCP Tools Name 作为…使用所以英语是必须的)
- 新的API 用于版本发布时的转换前后确认
OpenAPI 仕样书の英语化(MCP对应)
新的API 版本发布时的英语说明:
# 1. 現状確認
./script/check-mcp-compatibility docs/vX.XX.X.yaml
# 2. 自動変換(タグ名、operationId、summary を英語化)
./script/convert-to-english docs/vX.XX.X.yaml
# 3. 変換結果確認
./script/check-mcp-compatibility docs/vX.XX.X.yaml
# 4. バリデーション
./script/validateMCP (Model Context Protocol) 要件:
- 标记名称:日本语→英语(例:
社内連絡先→internal-contacts) - 操作ID:PascalCase→ 蛇病例(例如:
UsersGet→list_internal_contacts) - 总结:日本语→英语(例:
社内連絡先一覧取得→List Internal Contacts)
- ⚠️ 重要: summary 啊MCP Tools Name 的规格化距离的幂函数
Description 管理
单击功能区上description 啊MCP Tools 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
Description 确认
description 确认的状态:
# デフォルト(docs/v1.20.0.yaml をチェック)
./script/check-descriptions
# 別のYAMLファイルをチェック
./script/check-descriptions docs/vX.XX.X.yaml此脚本检查:
- ✅ 天空的description 查找
- ✅ 超过1000个字符description (MCP Tools的限制)
- ✅ 所有的description 列表显示
出力例:
=== Checking descriptions in docs/v1.20.0.yaml ===
Maximum description length for MCP Tools: 1000 characters
=== Issues ===
✅ No issues found!
=== All Descriptions ===
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Path: GET /users
Operation ID: list_internal_contacts
Summary: List Internal Contacts
Description Length: 902 chars
Description:
ツール名: List Internal Contacts
説明: 社内電話帳に登録された連絡先(ユーザ)の情報を一覧で取得します。
...
=== Summary ===
Total endpoints: 42
Empty descriptions: 0
Too long (> 1000 chars): 0
OK: 42Description 格式指南
description 中所述修改相应参数的值docs/sample-description-for-mcp.md 请参见模板:
description: |
ツール名: [英語のツール名]
説明: [日本語の簡潔な説明]
機能:
- [機能1の説明]
- [機能2の説明]
パラメータ:
必須パラメータ:
- [パラメータ名] ([type]): [説明]
オプションパラメータ:
- [パラメータ名] ([type]): [説明] (デフォルト: [値])
取得できるデータ:
- [データ項目1]
- [データ項目2]
用途:
- [ユースケース1]
- [ユースケース2]
制限:
- [制限事項1]
- APIキーごとのレート制限適用
例:方法/路径 \[请求示例\]
⚠️ 重要: description 必须包含在1000个字符以内(MCP Tools的限制)
API 重新导入
现有API Management 在实例中API 重新导入:
./script/reimport -g -apim 可选:
-g, --resource-group: Azure 资源组名称(必需)-apim, --apim-name: API Management 服务名称(必需)-api, --api-id: API ID(可选,默认值:phoneappli-api)-spec, --spec-file: OpenAPI Spec 文件路径(可选,默认值:docs/v1.20.0.yaml)
例:
# 基本的な使い方
./script/reimport -g my-resource-group -apim my-apim-service
# カスタム設定
./script/reimport -g my-rg -apim my-apim -api custom-api-id -spec docs/custom.yaml此脚本为:
- OpenAPI Spec 验证
- Description 分析长度
- 当前API备份配置
- API 重新导入
- 显示结果
API 手动导入
现有API Management 在实例中API 导入:
uv run python src/import_api.py \
--resource-group "my-rg" \ # または -g (必須)
--apim-name "my-apim-instance" \ # または -n (必須)
--openapi-spec "docs/v1.20.0.yaml" \ # または -s (必須)
--api-id "phoneappli-api" \ # オプション (デフォルト: phoneappli-api)
--api-path "phoneappli" \ # オプション (デフォルト: phoneappli)
--environment "sandbox" # または -e (オプション: sandbox/production, デフォルト: sandbox)环境选项:
sandbox:沙箱环境(https://api-sandbox.phoneappli.net/v1)-默认值production:本番环境(https://api.phoneappli.net/v1)
导入生产环境示例:
uv run python src/import_api.py \
-g "my-rg" \
-n "my-apim-instance" \
-s "docs/v1.20.0.yaml" \
-e "production"出力例:
╭──────────────────────────────────────────╮
│ Azure API Management - API Import │
╰──────────────────────────────────────────╯
✓ Authenticated to subscription: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Loading OpenAPI spec from: docs/v1.20.0.yaml
✓ Loaded API: PHONE APPLI API (v1.20)
Importing API to API Management: my-apim-instance
Resource Group: my-rg
API ID: phoneappli-api
API Path: /phoneappli
Environment: sandbox
Backend URL: https://api-sandbox.phoneappli.net/v1
╭─ Import Result ─────────────────────────╮
│ ✓ API imported successfully! │
│ │
│ API Details: │
│ Name: PHONE APPLI API │
│ Version: 1.20 │
│ Path: /phoneappli │
│ API ID: phoneappli-api │
│ Environment: sandbox │
│ │
│ Backend URL: │
│ https://api-sandbox.phoneappli.net/v1 │
│ │
│ Gateway URL: │
│ https://my-apim-instance.azure-api... │
╰──────────────────────────────────────────╯Bicep 直接部署模板
cd infra
# パラメータファイルを編集
vim main.bicepparam
# デプロイ実行
az deployment group create \
--name phoneappli-api-deployment \
--resource-group phoneappli-api-mcp-rg \
--template-file main.bicep \
--parameters main.bicepparam技术栈
|类别|技术| |---------|------| |IaC |蓝色二头肌 Azure验证模块(AVM) | 包管理 紫外线 | 验证openapi-spec-validator | |Azure SDK | Azure管理API管理,Azure身份| |CLI |点击,丰富| |代码质量|ruff, mypy |
环境变数
|变量名|说明|默认值| |-------|------|------------| | DEPLOYMENT_NAME 部署名称(也用作资源组名称) phoneappli-api-mcp-{timestamp} | | LOCATION |目标区域| japaneast | | ENVIRONMENT |目标环境(sandbox 或 production) | sandbox |
故障排除
uv 缺少
curl -LsSf https://astral.sh/uv/install.sh | shyq 缺少
macOS:
brew install yqLinux:
# Debian/Ubuntu
sudo apt-get install yq
# または、バイナリを直接ダウンロード
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/local/bin/yq
chmod +x /usr/local/bin/yqAzure CLI 旧版本
az upgradeAzure bicep 旧版本
az bicep upgradeAPI Management 配置时间
API Management Basic v2 进行动态观察时的轴心点。./script/deploy 自动等待完成。
API 导入失败
- API Management 已完成配置
- OpenAPI Spec 验证是否成功:
./script/validate - Azure 确认登录状态:
az account show
开発
添加依赖关系
# 本番依存関係
uv add
# 開発依存関係
uv add --dev
代码质量检查
# Linting
uv run ruff check .
# Type checking
uv run mypy src/
# Formatting
uv run ruff format .运行测试
# すべてのテストを実行
./script/test
# カバレッジレポート付きでテストを実行
./script/test -c
# 詳細な出力でテストを実行
./script/test -v
# 特定のテストファイルを実行
./script/test tests/test_validate.py
# カバレッジと詳細出力の両方
./script/test -c -v
# 直接 pytest を実行する場合
uv run pytest测试脚本选项:
-c, --coverage显示覆盖报告-v, --verbose:详细输出-w, --watch:监视模式(需要pytest-watch)-h, --help:显示帮助消息
许可证
MIT License - 了解更多信息 许可证 来修改标记元素的显示属性。
