Tufin MCP Server - Open Source Community Project について
Tufin MCP Serverは、Tufinユーザー向けのオープンソースRESTレイヤーで、SecureTrackとSecureChangeの操作をスクリプト、アプリ、AIワークフローに公開します。APIキー認証とロールベースのアクセス制御を備え、デバイス、チケット、トポロジーのAPIを提供します。
主な機能
- 01SecureTrackとSecureChangeへの接続
- 02デバイス、チケット、トポロジー操作
- 03APIキー認証とロールベースアクセス制御
- 04IPレート制限と構造化ログ
- 05OpenAPI仕様とクライアントライブラリ
活用シーン
- 01AIワークフローでのTufinデバイス照会
- 02SecureChangeチケットの作成と管理
- 03トポロジーAPIによるネットワーク経路の分析
MCP 対応
SecureTrackとSecureChangeの操作をREST/JSON APIで公開し、APIキーでクライアントを認証します。READMEにはMCPプロトコルのトランスポート実装について記載がありません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Tufin MCP サーバー - オープンソースコミュニティプロジェクト
はじめに
Tufin MCP(Multi-Controller Protocol)サーバープロジェクトへようこそ!このオープンソースの取り組みは、Tufin の堅牢な API(SecureTrack と SecureChange)と最新の AI 開発ワークフローの間をつなぐ強力なツールを、Tufin ユーザーに提供することを目指しています。
Tufin の機能を、ロールベースのアクセス制御(RBAC)を備えた安全で標準化された REST API を通じて公開することで、このサーバーを使用して、Tufin のデータや操作をカスタムスクリプト、アプリケーション、AI エージェント(Cursor、ChatGPT Actions、Ollama などで実行されるもの)に簡単に統合できます。
これはコミュニティ主導のプロジェクトです。 コントリビューションを歓迎します!新しいエンドポイントの対応追加、セキュリティの改善、クライアントライブラリの強化、バグ修正など、皆様からのご意見は貴重です。詳しくはコントリビューションのセクションをご確認ください。
GitHub でプロジェクトのリポジトリをご覧ください:https://github.com/stonecircle82/tufin-mcp
これを使用する理由
- AI 統合を簡素化: Tufin の既存 API を基盤とする最新の REST API レイヤーを提供し、AI ツール、チャットボット、自動化スクリプトとの統合を容易にします。
- 一元管理: Tufin へのアクセスと認証を一元的に管理できます。
- セキュリティの強化: Tufin の認証に加えて、API キー認証とロールベースのアクセス制御を追加します。
- 拡張性: より多くの Tufin API や、将来的には他のセキュリティプラットフォームにも対応できるよう設計されています。
- 将来的な可能性: 新しい Tufin API(GraphQL など)や、直接 API を呼び出すと複雑になり得る一括操作(ファイルからデバイスを追加するなど)といった機能への対応を目指しています。
概要
このサーバーは、Tufin API(v25.1 を対象)のセキュアなプロキシおよび抽象化レイヤーとして動作します。
主な機能:
- OpenAPI でドキュメント化された、標準的な REST/JSON API インターフェース。
- Tufin 認証の一元管理(環境変数で設定する Basic 認証を使用)。
- MCP クライアント向けの API キー認証(キーは bcrypt でハッシュ化)。
- 設定可能なロールベースのアクセス制御(Admin、Ticket Manager、User)。
- SecureChange と SecureTrack の主要な操作(チケット管理、デバイス、トポロジー)向けのエンドポイント。
- リクエスト ID を含む構造化 JSON ロギング。
- IP ベースのレート制限。
- 基本的な Python クライアントライブラリ。
- Docker のサポート。
はじめに
前提条件
- Python 3.8+
- 稼働中の Tufin SecureTrack および SecureChange インスタンスへのアクセス(v25.1 互換)。
- Docker(コンテナ経由で実行する場合)。
- Git。
インストール
-
リポジトリをクローンします:
git clone https://github.com/<your-username>/tufin-mcp.git # ** URL を置き換えてください ** cd tufin-mcp -
仮想環境を作成して有効化します:
python -m venv venv source venv/bin/activate # Windows の場合は `venv\Scripts\activate` を使用します -
依存関係をインストールします:
pip install -r requirements.txt
設定
設定は、環境変数またはプロジェクトのルートにある .env ファイルで管理します。
-
.envファイルを作成します:.env.exampleが提供されている場合はコピーするか、.envを手動で作成します。 -
必須の変数を設定します:
# Server Settings MCP_PORT=8000 LOG_LEVEL="INFO" # DEBUG, INFO, WARNING, ERROR # Tufin Connection (REPLACE with your details) TUFIN_SECURETRACK_URL="https://your-securetrack-host" TUFIN_SECURECHANGE_URL="https://your-securechange-host" TUFIN_USERNAME="your_tufin_username" TUFIN_PASSWORD="your_tufin_password" TUFIN_SSL_VERIFY="True" # Set to False only if absolutely necessary (insecure!) TUFIN_API_TIMEOUT="30.0" # Timeout for Tufin API calls in seconds # --- Development API Keys (Insecure - For Dev/Test Only!) --- # For the default In-Memory secure store, provide initial RAW keys and roles via this JSON string. # The server will HASH the keys on startup and store them in memory. # DO NOT USE PRODUCTION KEYS HERE. DEV_API_KEYS='[{"key":"admin_key_abc", "role":"admin"}, {"key":"manager_key_xyz", "role":"ticket_manager"}, {"key":"user_key_123", "role":"user"}]'SSL 検証に関する注意(
TUFIN_SSL_VERIFY): デフォルトでは、サーバーは Tufin インスタンスの SSL 証明書を検証します(TUFIN_SSL_VERIFY="True")。これを"False"に設定すると検証が無効になります。自己署名証明書を使用する環境では必要となる場合がありますが、接続が中間者攻撃にさらされるため、本番環境では非常に危険です。内部 CA を使用する場合は、基盤となるシステムを設定するか、カスタム CA バンドルのパスを指定することを検討してください(コードの変更が必要です)。本番環境のセキュリティに関する注意: API キーは bcrypt を使用してハッシュ化されます。デフォルトの
InMemorySecureStoreは、開発環境でのみDEV_API_KEYSから未加工のキーを読み込みます。本番環境では、必ず以下を行ってください。src/app/core/secure_store.pyのInMemorySecureStoreを、セキュアなデータベースまたはシークレットマネージャー(例:HashiCorp Vault)を使用する実装に置き換えます。- API キーを管理するための安全なプロセス/エンドポイント(生成、ハッシュとロールの保存、取り消し)を実装します。
- 本番環境では
DEV_API_KEYSを使用しないでください。
サーバーの実行
ローカル開発(Uvicorn)
# From the project root directory
uvicorn src.app.main:app --reload --port ${MCP_PORT:-8000}
--reloadフラグを指定すると、コードの変更時に自動で再読み込みされます。.envで定義されたポートを使用します。定義されていない場合は、デフォルトの 8000 を使用します。
Docker コンテナー
-
イメージをビルドします:
# From the project root directory docker build -t tufin-mcp-server:latest . -
コンテナーを実行します:
docker run --rm -d \ --name tufin-mcp \ --env-file .env \ -p ${MCP_PORT:-8000}:${MCP_PORT:-8000} \ tufin-mcp-server:latest- ローカルの
.envファイルから環境変数を読み込みます。 - ホストのポートをコンテナーのポート(
MCP_PORTで定義。未定義の場合はデフォルトの 8000)にマッピングします。
- ローカルの
-
アクセス:
http://localhost:${MCP_PORT:-8000} -
ログ:
docker logs tufin-mcp(追跡するには-fを指定) -
停止:
docker stop tufin-mcp
テスト
このプロジェクトでは、テストに pytest を使用します。
-
テスト用の依存関係をインストールします:
pip install -r requirements-dev.txt -
テストを実行します:
# From the project root directory pytest- 特定のファイルを実行できます:
pytest tests/api/v1/test_endpoints.py - 詳細な出力には
-vを使用します:pytest -v -kを使用すると、名前でテストを絞り込めます:pytest -k list_devices
- 特定のファイルを実行できます:
-
テストカバレッジ(任意):
pytest-covをインストールし(pip install pytest-cov)、次を実行します。pytest --cov=src/app --cov-report=term-missing
API の使用方法
認証
/health を除くすべてのリクエストで、生成した API キーを HTTP ヘッダー X-API-Key に指定します。
認可(RBAC)
アクセスは、キーの作成時にAPIキーに割り当てられたロールによって制御されます(安全な本番環境向けプロセスを使用するか、開発環境ではDEV_API_KEYSを使用します)。各エンドポイントで許可されるロールは、src/app/core/config.pyのENDPOINT_PERMISSIONSで設定します。
- ロール:
admin、ticket_manager、user。 - 必要な権限のない状態で操作を試みると、
403 Forbiddenが返されます。
エンドポイント権限の設定:
src/app/core/config.pyのENDPOINT_PERMISSIONS辞書で、各論理アクション(権限ID)にアクセスできるロールを定義します。例:
# src/app/core/config.py
ENDPOINT_PERMISSIONS: Dict[str, List[UserRole]] = {
"list_devices": [UserRole.ADMIN, UserRole.TICKET_MANAGER, UserRole.USER],
"get_device": [UserRole.ADMIN, UserRole.TICKET_MANAGER, UserRole.USER],
"create_ticket": [UserRole.ADMIN, UserRole.TICKET_MANAGER],
# ... other permissions ...
}
- この方法を採用する理由: アクセス制御ポリシーを一元管理することで、エンドポイントのコード自体を変更せずに権限を簡単に確認、変更できます。
- 仕組み: 各APIエンドポイントのルートでは、
require_permission("permission_id")依存関係を使用します。この依存関係は、ユーザーの有効なAPIキーに関連付けられたロールが、ENDPOINT_PERMISSIONS辞書で該当するpermission_idに定義されているリストに含まれているかを確認します。 - カスタマイズ:
config.pyで、任意の権限IDに対するUserRole列挙型のリストを変更することで、アクセス権を簡単にカスタマイズできます。エンドポイントを追加する際は、新しい権限IDも追加してください。
レート制限
IPアドレスベースのレート制限が適用されます(デフォルト:60回/分)。制限を超えると、429 Too Many Requestsが返されます。
エンドポイントの概要
APIの構成はopenapi.yamlで定義されています。このファイルを直接確認するか、仕様がアプリケーションから提供されている場合はSwagger UIなどのツールを使用できます(main.pyに静的ファイル配信を追加する必要があります)。
現在のエンドポイント一覧:
GET /health:ヘルスチェック。POST /api/v1/tickets:SecureChangeチケットを作成します。GET /api/v1/tickets:SecureChangeチケットの一覧を取得します(statusによるフィルタリングに対応)。GET /api/v1/tickets/{ticket_id}:指定したSecureChangeチケットを取得します。PUT /api/v1/tickets/{ticket_id}:SecureChangeチケットを更新します。GET /api/v1/devices:SecureTrackデバイスの一覧を取得します(status、name、vendorによるフィルタリングに対応)。GET /api/v1/devices/{device_id}:SecureTrackデバイスの詳細を取得します。POST /api/v1/devices/bulk:1台以上のデバイスを追加します(リクエスト本文にベンダー固有のdevice_dataが必要です)。POST /api/v1/devices/bulk/import:管理対象デバイス(DG、ADOM、コンテキストなど)を既存の管理デバイスにインポートします。GET /api/v1/topology/map:SecureTrackのトポロジーマップを取得します。POST /api/v1/topology/query:SecureTrackのトポロジークエリを実行します。GET /api/v1/topology/path:SecureTrackのトポロジーパスクエリを実行します。traffic_allowed、is_fully_routed、および(通信が許可され、ルーティングされている場合は)path_device_namesを含む要約結果を返します。GET /api/v1/topology/path/image:トポロジーパスを画像(例:PNG)として取得します。POST /api/v1/graphql/rules:GraphQLとTQLフィルターを使用してSecureTrackのルールをクエリします。
注: 実装には、Tufin 25.1 REST APIドキュメントに照らした確認が必要です。フィルターの実装については、Tufin API固有の構文を確認する必要があります。
基本的な例(curl)
# Set environment variables for convenience
export MCP_URL="http://localhost:8000"
export MCP_API_KEY="your_api_key_here"
# Health Check
curl "$MCP_URL/health"
# List Devices
curl -H "X-API-Key: $MCP_API_KEY" "$MCP_URL/api/v1/devices?limit=5"
# Create Ticket (Requires appropriate role for the key)
curl -X POST -H "X-API-Key: $MCP_API_KEY" -H "Content-Type: application/json" \
-d '{"subject": "API: Allow Port 443", "description": "...details..."}' \
"$MCP_URL/api/v1/tickets"
# Example Topology Path Query
curl -G -H "X-API-Key: $MCP_API_KEY" "$MCP_URL/api/v1/topology/path" \
--data-urlencode "src=1.1.1.1" \
--data-urlencode "dst=8.8.8.8" \
--data-urlencode "service=tcp:443"
# Example Topology Path Image Request (save to file)
curl -H "X-API-Key: $MCP_API_KEY" "$MCP_URL/api/v1/topology/path/image?src=1.1.1.1&dst=8.8.8.8&service=tcp:443" -o topology_path.png
# Example Add Device (Cisco ASA - requires ADMIN role & correct device_data)
curl -X POST -H "X-API-Key: $MCP_API_KEY" -H "Content-Type: application/json" \
-d '{
"devices": [
{
"display_name": "MCP-ASA-Test",
"ip_address": "10.1.2.3",
"vendor": "Cisco",
"model": "ASA",
"securetrack_domain": "Default",
"enable_topology": true,
"device_data": {
"user_name": "tufin-api-user",
"password": "tufin-api-password",
"enable_password": "tufin-enable-password"
# Add other ASA specific fields from Tufin docs here
}
}
]
}' \
"$MCP_URL/api/v1/devices/bulk"
# Example Import Managed Devices (Panorama DG)
curl -X POST -H "X-API-Key: $MCP_API_KEY" -H "Content-Type: application/json" \
-d '{
"devices": [
{
"device_id": "1",
"device_data": {
"import_all": false,
"import_devices": [
{"name": "DG1", "import_all": false, "managed_devices": ["fw1"]}
]
}
}
]
}' \
"$MCP_URL/api/v1/devices/bulk/import"
# Example GraphQL Rule Query (using curl and jq for readability)
# Find firewall rules allowing any source to 8.8.8.8
export TQL_FILTER="destination.ip 8.8.8.8"
curl -X POST -H "X-API-Key: $MCP_API_KEY" -H "Content-Type: application/json" \
-d "{\"tql_filter\": \"$TQL_FILTER\"}" \
"$MCP_URL/api/v1/graphql/rules" | jq
OpenAPI仕様
ルートディレクトリには、OpenAPI 3.0仕様ファイル(openapi.yaml)が含まれています。このファイルでは、エンドポイント、パラメーター、リクエスト/レスポンスのスキーマ、セキュリティ要件など、APIが正式に記述されています。さまざまなツールで利用できます。
- コード生成: さまざまな言語でクライアントライブラリを生成します。
- APIドキュメント: Swagger UIやRedocなどのツールを使用して、インタラクティブなドキュメントを表示します。
- AI連携: ChatGPT Actionsなどのプラットフォームにインポートして、連携を可能にします。
- テストツール: PostmanやInsomniaなどのツールで使用します。
(任意の拡張): この仕様を/openapi.yamlで自動的に提供し、インタラクティブなドキュメント(Swagger UI/Redoc)を表示するよう、FastAPIを設定することを検討してください。
Pythonクライアントライブラリ
基本的なPythonクライアントライブラリの構成がclient_libs/python/に用意されています。
インストール(ローカルソースから)
# From the project root directory
cd client_libs/python
pip install .
使用例
from tufin_mcp_client import TufinMCPClient, TufinMCPClientError
SERVER_URL = "http://localhost:8000"
API_KEY = "your_api_key_here"
# Use as a context manager (recommended)
with TufinMCPClient(base_url=SERVER_URL, api_key=API_KEY) as client:
try:
health = client.get_health()
print(f"Health: {health}")
devices = client.list_devices()
print(f"Devices Found: {devices.total}")
# Example: Get first device if list is not empty
if devices.devices:
first_device_id = devices.devices[0].id
device_details = client.get_device(first_device_id)
print(f"Device {first_device_id}: {device_details.name} ({device_details.vendor})")
# Example: Create Ticket
ticket_data = {
"workflow_name": "Example Firewall Workflow", # Check configured workflows
"subject": "Client Lib Test",
"details": { # Workflow specific fields go here
"description": "Testing ticket creation via client",
"priority": "Medium"
# Add other fields required by the specific workflow
}
}
created_ticket = client.create_ticket(ticket_data)
print(f"Created Ticket ID: {created_ticket.id}, Status: {created_ticket.status}")
ticket_id = created_ticket.id
if ticket_id:
retrieved_ticket = client.get_ticket(ticket_id)
print(f"Retrieved Ticket {ticket_id}: Subject: {retrieved_ticket.subject}")
updated_data = {"status": "In Progress"} # Check actual updatable fields
updated_ticket = client.update_ticket(ticket_id, updated_data)
print(f"Updated Ticket {ticket_id}: Status: {updated_ticket.status}")
# Example Add Device
asa_device = {
"display_name": "MCP-ASA-Test-Client",
"ip_address": "10.1.2.4",
"vendor": "Cisco",
"model": "ASA",
"securetrack_domain": "Default",
"enable_topology": True,
"device_data": {
"user_name": "tufin-api-user",
"password": "tufin-api-password",
"enable_password": "tufin-enable-password"
}
}
client.add_devices([asa_device]) # Pass as a list
print("Device add request accepted.")
# Example Import Managed Device
import_details = {
"devices": [
{
"device_id": "1", # Panorama ID
"device_data": {
"import_all": False,
"import_devices": [
{"name": "DG_CLIENT", "import_all": True}
]
}
}
]
}
client.import_managed_devices(import_details)
print("Managed device import request accepted.")
# Example GraphQL Rule Query
rule_filter = "action accept and source.ip 192.168.1.0/24"
rules_response = client.query_rules_graphql(tql_filter=rule_filter)
print(f"\nFound {rules_response.rules.count} rules matching filter:")
for rule in rules_response.rules.values:
print(f" - ID: {rule.id}, Name: {rule.name}, Action: {rule.action}")
except TufinMCPClientError as e:
print(f"MCP Client Error: {e}")
if e.status_code:
print(f" Status Code: {e.status_code}")
if e.response_text:
print(f" Response: {e.response_text}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
注記: クライアントライブラリは基本的な機能とエラー処理(TufinMCPClientError)を提供し、レスポンスとして Pydantic モデルを返します。今後、さらなる機能強化を予定しています(ロードマップを参照)。
JavaScript / TypeScript クライアントライブラリ
MCP サーバー API とやり取りするための基本的な TypeScript クライアントライブラリの構成が、client_libs/javascript/ に用意されています。
インストール
# From your JS/TS project directory
npm install <path_to_client_libs/javascript>
# or link for local development
# cd client_libs/javascript && npm link && cd ../../ && npm link tufin-mcp-client-js
# Or if published to npm:
# npm install tufin-mcp-client-js
ソースからインストールする場合は、事前にクライアントをビルドしてください:cd client_libs/javascript && npm run build && cd ../..
使用例(TypeScript)
import { TufinMCPClient, TufinMCPClientError } from 'tufin-mcp-client-js'; // Adjust import path
const SERVER_URL = 'http://localhost:8000'; // Your MCP Server URL
const API_KEY = 'your_api_key_here';
const client = new TufinMCPClient(SERVER_URL, API_KEY);
async function runClient() {
try {
const health = await client.getHealth();
console.log('Health:', health);
const devices = await client.listDevices({ limit: 5 }); // Example param
console.log(`Devices Found: ${devices.total}`);
console.log('First device:', devices.devices[0]);
// Example: Create Ticket
const ticketData = {
workflow_name: 'Example Firewall Workflow', // Check configured workflows
subject: 'TS Client Test',
details: {
description: 'Testing ticket from TS client',
priority: 'Low'
// Add other workflow-specific fields
}
};
const createdTicket = await client.createTicket(ticketData);
console.log(`Created Ticket ID: ${createdTicket.id}, Status: ${createdTicket.status}`);
// Example Add Device
const asaDevice = {
display_name: "MCP-ASA-Test-JS",
ip_address: "10.1.2.5",
vendor: "Cisco",
model: "ASA",
securetrack_domain: "Default",
enable_topology: true,
device_data: {
user_name: "tufin-api-user",
password: "tufin-api-password",
enable_password: "tufin-enable-password"
}
};
await client.addDevices([asaDevice]); // Pass as an array
console.log("Device add request accepted.");
// Example Import Managed Device
const importDetails = {
devices: [
{
device_id: "1", // Panorama ID
device_data: {
import_all: false,
import_devices: [
{ name: "DG_JS_CLIENT", import_all: true }
]
}
}
]
};
await client.importManagedDevices(importDetails);
console.log("Managed device import request accepted.");
// Example GraphQL Rule Query
const ruleFilter = "disabled true";
const rulesResponse = await client.queryRulesGraphQL({tql_filter: ruleFilter});
console.log(`\nFound ${rulesResponse.rules.count} disabled rules:`);
rulesResponse.rules.values.forEach(rule => {
console.log(` - ID: ${rule.id}, Name: ${rule.name}`);
});
} catch (error) {
if (error instanceof TufinMCPClientError) {
console.error('MCP Client Error:', error.message);
if (error.status) {
console.error(' Status Code:', error.status);
}
if (error.data) {
console.error(' Response Data:', error.data);
}
} else {
console.error('An unexpected error occurred:', error);
}
}
}
runClient();
注記: このクライアントは基本的なものです。包括的なエラー処理、モデルの解析(any に依存しない場合)、より堅牢な型安全性を実現するには、さらなる開発が必要です。
Tufin API 直接クライアント(代替)
MCP サーバーを介さず、基本認証を使用して Tufin API に直接接続する必要がある場合は、client_libs/javascript_direct/ に別のシンプルな JS/TS クライアントライブラリがあります。詳細については、そのディレクトリ内の README を参照してください。
AI ツールとの統合
- 主な要件: MCP サーバー URL、API キー。
- 方法: Python クライアントライブラリまたは API の直接呼び出し。
- ツールの使用方法: Cursor、ChatGPT Actions(
openapi.yamlを使用)、Copilot(コードコンテキスト経由)、Ollama/OpenRouter(中継スクリプト経由)。 - セキュリティ上の考慮事項: キー管理、HTTPS、最小権限、モニタリング。
コントリビューション
コントリビューションを歓迎します!参加方法、バグの報告、機能の提案、プルリクエストの送信については、コントリビューションガイドラインをご覧ください。
また、行動規範を遵守しています。
ロードマップ/今後の機能強化
このリストには、既知の TODO と今後の機能強化案が記載されています。
- Tufin REST API ロジックの検証と改善:
src/app/clients/tufin.pyで使用しているすべての Tufin REST API エンドポイントのパス、メソッド、リクエストパラメーター/本文(特にフィルタリングの構文/機能)、レスポンス構造を、公式の Tufin 25.1 REST ドキュメントと照らし合わせて再確認してください。src/app/models/の Pydantic モデルが、検証済みの Tufin REST API レスポンスを正確に解析できるようにしてください。
- GraphQL API の統合:
- Tufin SecureTrack GraphQL API(ドキュメント)を利用するエンドポイントを調査・実装し、より豊富なデータ取得(デバイス、ルール、USP など)を実現します。(ルールのクエリを追加済み)
- MCP API 経由で GraphQL クエリのフィールドを動的に選択できるようにします。
- 一括操作:
- ファイル(CSV/Excel など)から複数のデバイスを追加/更新する操作や、管理対象デバイスのインポートなど、一括操作用のエンドポイントを実装します。
- 本番環境のセキュリティ:
InMemorySecureStoreを本番環境対応のソリューション(データベース、Vault)に置き換え、安全な API キー管理(生成、失効)を実装します。src/app/core/logging_config.pyに機密データの堅牢なマスキングを実装します。- 本番環境へのデプロイで適切な SSL 証明書検証(
TUFIN_SSL_VERIFY)が設定されていることを確認します。
- テスト:
- クライアントロジック、API エンドポイント、セキュリティ、エラー処理を網羅する包括的な単体テストと統合テストを追加します。
- クライアントライブラリ:
- Python クライアントライブラリを強化します(エラー処理、レスポンスモデル/解析)。
- JS/TS クライアントライブラリを強化します(エラー処理、ビルドプロセス)。
- Tufin クライアントの改善:
src/app/clients/tufin.pyのhttpxクライアントに、設定可能なタイムアウトとリトライロジックを追加します。
- デプロイと開発者体験:
- 追加のデプロイガイダンス(Kubernetes マニフェスト、本番環境向け Gunicorn 設定など)を追加します。
openapi.yamlとインタラクティブなドキュメント(Swagger UI/Redoc)を提供するように FastAPI を設定します。
ライセンス
このプロジェクトは MIT License のもとでライセンスされています。詳細については、LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。