custom_mcp
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"databricks-custom-mcp": {
"transport": "http",
"url": "https://your-databricks-app-url.com"
}
}
}
服务介绍
Databricks Apps上MCP
Databricks Apps上MCP (Model Context Protocol) 構築実装LLMClaudeCursor等呼出可能2提供
提供
- get_stock_info: TSE東京証券取引所株式情報取得
- run_query_on_databricks: Databricks SQLSQL実行
構成
custom_mcp/
app.py # MCP
main.py # Uvicorn
app.yaml # Databricks Apps設定
databricks.yml # Databricks設定
requirements.txt # Python依存関係
README.md #
必要環境
- Python 3.11以上
- Databricks CLI
- Databricks権限
開発環境
- 仮想環境作成有効化
python3 -m venv .venv
source .venv/bin/activate # Windows場合: .venv\Scripts\activate
- 依存関係
pip install -r requirements.txt
- 起動
python main.py
http://localhost:8000 起動
curl http://localhost:8000/health
Databricks Apps
前提条件
- Databricks CLI
- Databricks認証済
- SQL作成
手順
- app.yaml設定
app.yaml``WAREHOUSE_ID環境変数使用SQLID設定
command: ["python", "main.py"]
env:
- name: 'WAREHOUSE_ID'
value: 'your-warehouse-id-here'
- Databricks Apps
databricks apps deploy
- 確認
databricks apps list
URL確認
LLM利用
Claude Desktop / Cursor 設定例
MCP設定claude_desktop_config.json``cursor_config.json以下追加
{
"mcpServers": {
"databricks-custom-mcp": {
"url": "https://your-databricks-app-url.com",
"transport": "http"
}
}
}
使用例
LLM以下指示呼出
自動車7203株価情報教
SQL "SELECT * FROM catalog.schema.table LIMIT 10" 実行
問題解決方法
1. 呼出
問題: LLMMCP認識表示
原因:
@mcp.tool()``name指定- MCP間違
/mcp``/
解決方法:
# 間違方法
@mcp.tool(name="tool_name", description="...")
def my_tool():
pass
app.mount("/mcp", mcp_app) #
# 正方法
@mcp.tool()
def my_tool():
"""説明docstring記載"""
pass
app.mount("/", mcp_app) #
2. FastMCP object has no attribute 'app'
問題: app = mcp.app``app = mcp.http_app()発生
解決方法: FastMCP以下方法ASGI作成
# 正方法
mcp_app = mcp.streamable_http_app()
app = FastAPI(lifespan=lambda _: mcp.session_manager.run())
app.mount("/", mcp_app)
3. ModuleNotFoundError: No module named 'custom_server'
問題: 見
原因: 構造複雑src/custom_server入子構造
解決方法: 構造main.py``app.py同配置
4. DataFrame返
問題: run_query_on_databrickspandas DataFrame直接返
解決方法: 文字列変換返
@mcp.tool()
def run_query_on_databricks(sql_query: str):
# ... 実行 ...
df = pd.DataFrame(rows, columns=[...])
return df.to_string() # 文字列変換
5. Uvicornreload起動
問題: uvicorn.run(reload=True)動作
解決方法: reload文字列指定必要
# 正方法
uvicorn.run(
"app:app", # 文字列指定
host="0.0.0.0",
port=8000,
reload=True,
)
開発
追加方法
新追加場合@mcp.tool()使用
@mcp.tool()
def my_custom_tool(param1: str, param2: int) -> str:
"""説明記載
LLM選択際説明参考
"""
# 実装
result = some_operation(param1, param2)
return str(result) # 文字列返推奨
追加方法
動的公開場合@mcp.resource()使用
@mcp.resource("data://{resource_id}")
def get_resource(resource_id: str) -> str:
"""動的取得"""
return f"Resource content for {resource_id}"
確認
Databricks AppsDatabricks CLIUI確認
databricks apps logs <app-name>
関注意事項
- 認証: Databricks Apps自動的Bearer認証提供
- 環境変数: 機密情報
app.yaml``env設定 - SQL: SQL実行必要応入力検証実装
参考
実装自由改変利用
問題発生場合以下確認
- Databricks Apps
- 環境結果
- MCP側設定
作成日: 2025-11-06
****: 1.0.0