使用说明
Heroku MCP文档阅读器(HTML/PDF-->Markdown)
自动部署
手动部署
从Heroku CLI设置所需的环境变量
使用Heroku CLI提取正确的值,而不是手动设置每个变量。
export APP_NAME=<your-heroku-app-name>
heroku create $APP_NAME
heroku buildpacks:set heroku/python -a $APP_NAME
# set a private API key that you create, for example:
heroku config:set API_KEY=$(openssl rand -hex 32) -a $APP_NAME
heroku config:set STDIO_MODE_ONLY=<true/false> -a $APP_NAME
# set the remote server type (module) that your web process will use (only relevant for web deployments)
heroku config:set REMOTE_SERVER_TRANSPORT_MODULE=<streamable_http_server/sse_server>
如果你 仅 希望本地部署 STDIO 能力(否 SSE server),运行:
heroku ps:scale web=0 -a $APP_NAME
如果您确实希望部署 SSE 服务器,运行:
heroku ps:scale web=1 -a $APP_NAME
heroku config:set WEB_CONCURRENCY=1 -a $APP_NAME
(可选)将这些配置变量放入本地.env文件中进行本地开发:
heroku config -a $APP_NAME --shell | tee .env > /dev/null
接下来,将您的应用程序连接到git仓库:
heroku git:remote -a $APP_NAME
并部署!
git push heroku main
通过以下方式查看日志:
heroku logs --tail -a $APP_NAME
局部测试
一次性软件包安装:
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt
本地流式HTTP、SSE
如果您正在测试(无状态)可流式HTTP或SSE,则需要在一个终端窗格中启动服务器:
source venv/bin/activate
export API_KEY=$(heroku config:get API_KEY -a $APP_NAME)
# Either run src.streamable_http_server or src.sse_server, here:
uvicorn src.streamable_http_server:app --reload
跑步 --reload 是可选的,但对当地发展很有帮助
接下来,在一个新窗格中,您可以尝试对服务器运行一些查询:
本地流式HTTP、SSE-请求示例
第一轮:
export API_KEY=$(heroku config:get API_KEY -a $APP_NAME)
在以下命令中,使用 example_clients/streamable_http_client.py 如果您运行了上面的流式HTTP服务器,或者 example_clients/sse_client.py 如果您正在运行SSE服务器。
列出工具:
python example_clients/streamable_http_client.py mcp list_tools | jq
示例工具调用请求-HTML:
注意:如果您已设置,这将故意不起作用 STDIO_MODE_ONLY 到 true.
python example_clients/streamable_http_client.py mcp call_tool --args '{
"name": "html_to_markdown",
"arguments": {
"url": "https://example.com"
}
}' | jq
示例工具调用请求-PDF:
python example_clients/streamable_http_client.py mcp call_tool --args '{
"name": "pdf_to_markdown",
"arguments": {
"url": "https://arxiv.org/pdf/1706.03762"
}
}' | jq
本地STDIO
有两种方法可以在STDIO模式下轻松测试MCP服务器:
1.本地STDIO-Python STDIO客户端示例
列出工具:
python example_clients/stdio_client.py mcp list_tools | jq
示例工具调用请求-HTML:
注意:如果您已设置,这将故意不起作用 STDIO_MODE_ONLY 到 true.
python example_clients/stdio_client.py mcp call_tool --args '{
"name": "html_to_markdown",
"arguments": {
"url": "https://example.com"
}
}' | jq
示例工具调用请求-PDF:
python example_clients/stdio_client.py mcp call_tool --args '{
"name": "pdf_to_markdown",
"arguments": {
"url": "https://arxiv.org/pdf/1706.03762"
}
}' | jq
2.本地STDIO-直拨电话
示例工具调用请求:
cat <<EOF | python -m src.stdio_server
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"0.1.0","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}
{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"html_to_markdown","arguments":{"url":"https://example.com"}}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"pdf_to_markdown","arguments":{"url":"https://arxiv.org/pdf/1706.03762"}}}
EOF
(请注意,服务器希望客户端发送关闭请求,因此您可以使用CTRL-C停止连接)
远程测试
export API_KEY=$(heroku config:get API_KEY -a $APP_NAME)
export MCP_SERVER_URL=$(heroku info -s -a $APP_NAME | grep web_url | cut -d= -f2)
远程SSE
测试您的遥控器 SSE 在服务器上,您需要确保web进程确实已启动。为了节省成本,默认情况下,这个存储库在创建时不会启动web dynos,因为许多人只想使用 STDIO 模式(本地和一次性dyno)请求:
heroku ps:scale web=1 -a $APP_NAME
你只需要做一次,除非你把速度降到0网络动态以节省成本(heroku ps:scale web=0 -a $APP_NAME).要确认当前正在运行的dynos,请使用 heroku ps -a $APP_NAME.
接下来,您可以运行与中所示相同的查询 本地SSE-请求示例 测试部分-因为您已经设置 MCP_SERVER_URL,客户端将调用您部署的服务器。
远程STDIO
有两种方法可以在STDIO模式下测试远程MCP服务器:
1.远程STDIO-在服务器上运行的Python STDIO客户端示例
要针对部署的代码运行,您可以在一次性dyno中在部署的服务器上运行示例客户端代码:
heroku run --app $APP_NAME -- bash -c 'python -m example_clients.stdio_client mcp list_tools | jq'
或者:
heroku run --app $APP_NAME -- bash -c '
python -m example_clients.stdio_client mcp call_tool --args '\''{
"name": "html_to_markdown",
"arguments": {
"url": "https://example.com"
}
}'\'' | jq
'
2.远程STDIO-直接呼叫一次性Dyno
或者,您也可以在本地运行或模拟一个客户端,该客户端将您的客户端请求发送到一次性dyno:
heroku run --app "$APP_NAME" -- bash -c "python -m src.stdio_server 2> logs.txt" <<EOF
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"0.1.0","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}
{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"html_to_markdown","arguments":{"url":"https://example.com"}}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"pdf_to_markdown","arguments":{"url":"https://arxiv.org/pdf/1706.03762"}}}
EOF
再次注意,由于我们通过单个命令运行请求,因此无法模拟客户端的关闭请求。
3.即将推出-Heroku MCP网关!
很快,您还可以将MCP仓库连接到Heroku的MCP网关,这将使一次性MCP dynos的流式请求和响应变得简单!
Heroku MCP网关实现了会合协议,因此您可以通过无缝的来回通信轻松地与MCP服务器进行一次性dynos(代码执行隔离!)通信。
之后 部署和注册 您在heroku上的MCP应用程序,向heroku的请求 v1/mcp/servers 将向您展示您注册的MCP工具以及向 v1/agents/heroku 将能够通过一次性dynos自动执行您的MCP工具。
