远程MCP函数服务

基于Azure Functions的Python远程MCP工具服务,提供问候、代码片段存储与检索功能。

  • by kevinflint-cs2
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 kevinflint-cs2/remote-mcp-functions-python

使用说明

远程MCP函数(Python)

公开模型上下文协议工具的Azure函数(Python v2装饰器模型) 用于问候、将片段保存到Azure Blob存储中,并按名称检索它们。 Poetry管理依赖关系,Poe任务协调linting、打字、测试和 包装。

[!重要] 始终部署 src.zip 由...制作 func pack (或 scripts/pack_and_validate.py),不是手工制作的档案,而是如此生成的 function.json 文件存在。

特性

  • MCP工具触发器 hello_mcp, save_snippet,以及 get_snippet
  • MCP工具触发器 hello_mcp, save_snippet, get_snippet, abuseipdb_check_ip,以及 abuseipdb_report_ip
  • blob存储中的片段持久性 snippets/{snippetname}.json
  • 严格的打字、Ruff格式化/linting和边缘情况的pytest覆盖率
  • 打包保护脚本,以确保在部署之前可以发现所需的功能

建筑

组件 目的
src/function_app.py 声明 FunctionApp、MCP工具模式,并导入用于发现的函数
src/functions/hello_mcp.py 返回一个简单的问候语
src/functions/save_spippet.py 通过输出绑定将代码段内容写入blob存储
src/functions/get_snippet.py 通过输入绑定按名称读取代码段
scripts/pack_and_validate.py 运行 func pack 并断言所有预期功能都已注册

先决条件

  • Python 3.11+和诗歌安装
  • PATH上的Azure功能核心工具v4(func)
  • 的Azure存储连接字符串 AzureWebJobsStorage
  • 可选:Azurite用于本地存储模拟

快速入门

  1. 安装依赖项和工具:

    poetry install
    
  2. 激活虚拟环境(如果您在命令前加上前缀,则可选 poetry run):

    poetry shell
    
  3. 配置 AzureWebJobsStorage 在 src/local.settings.json 或者你的壳 环境。

  4. 从启动Functions主机 src:

    cd src
    func start
    

MCP工具

  • hello_mcp:返回问候字符串。
  • save_snippet:需要参数 snippetname 和 snippet;将内容写入 snippets/{snippetname}.json.
  • get_snippet:期待争论 snippetname;返回存储的代码段内容。
  • abuseipdb_check_ip:期待争论 ip;查询AbuseIPDB的信誉 数据。
  • abuseipdb_report_ip:需要参数 ip, categories,以及 comment; 向AbuseIPDB报告虐待行为。

保存代码段的示例有效载荷:

{
  "arguments": {
    "snippetname": "example",
    "snippet": "print('hello')"
  }
}

[!注意] MCP触发器上下文被视为JSON字符串;无效的JSON返回 错误消息,而不是写入存储。

测试和质量

  • 格式和lint: poetry run poe lint
  • 类型检查: poetry run poe typecheck
  • 测验: poetry run poe test
  • 全套房: poetry run poe check

打包和部署

  • 验证并构建包工件:

    python scripts/pack_and_validate.py --source src --output artifacts/pack
    
  • 部署生成的 artifacts/pack/src.zip 到Azure函数(Flex 消耗量或等效物)。部署后,使用以下命令确认功能:

    az functionapp function list -n <app> -g <resource-group>
    

配置

  • 存储路径:片段存储在 snippets/{snippetname}.json 默认情况下 集装箱。
  • 日志记录:通过以下方式启用Application Insights采样 host.json.
  • 扩展包:用途 Microsoft.Azure.Functions.ExtensionBundle.Experimental 版本 [4.*, 5.0.0).

[!提示] 如果在读取blob时发生本地解码错误,请确保存储的内容 UTF-8编码。