使用说明
Databricks Apps上面的自定义MCP服务器
此项目包括:Databricks Apps在上面自定义MCP (Model Context Protocol) 用于构建和部署服务器的示例实现。LLM(Claude、Cursor等),模板名称将采用不同的格式。
提供的工具
- get_stock_info: TSE(东京证券取引所)の株式情报を取得
- 运行查询数据块: Databricks SQL在仓库SQL执行查询
项目配置
custom_mcp/
├── app.py # MCPサーバーのメインアプリケーション
├── main.py # Uvicornサーバーのエントリーポイント
├── app.yaml # Databricks Apps設定ファイル
├── databricks.yml # Databricksバンドル設定
├── requirements.txt # Python依存関係
└── README.md # このファイル
安装,安装
所需环境
- Python 3.11以上
- copula命令行界面
- 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用于环境变量SQL仓库的ID中所述修改相应参数的值。
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.未调用工具
问题: LLM的MCP识别服务器,但未显示工具
原因:
@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_databricks的pandas DataFrame直接返回错误
解决方法:转换为字符串并返回
@mcp.tool()
def run_query_on_databricks(sql_query: str):
# ... クエリ実行 ...
df = pd.DataFrame(rows, columns=[...])
return df.to_string() # ✅ 文字列に変換
5. Uvicorn的,之reload模式下不启动
问题: 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 Apps的日志Databricks CLI或腹板UI查看项目中可用的所有族:
databricks apps logs <app-name>
安全注意事项
- 认证: Databricks Apps自动的Bearer提供令牌认证
- 环境变数:机密信息
app.yaml的,之env请在节中设置,不要对代码进行硬编码 - SQL注入: SQL执行查询的工具应根据需要实现输入验证
参考链接
许可证
这个项目是示例实现。请自由改变、利用。
支持
如果出现问题,请检查:
- Databricks Apps日志
- 本地环境测试结果
- MCP客户端设置
作成日: 2025-11-06 版本: 1.0.0
