使用代码创建工具

当你需要以代码方式精细定义工具逻辑,并将工具纳入团队的工程体系(Git 管理、CI/CD、单元测试等)时,可以使用代码创建方式创建工具。

通过代码创建工具,可以将工具的定义纳入版本控制(如 Git),实现持续集成与部署(CI/CD),并支持更复杂的初始化逻辑。

在该模式下:

  • 编写的工具会以函数计算(FC)HTTP 函数的形式运行;

  • 可以被 AgentRun创建的Agent作为MCP 工具Function Call 工具引用;

  • 也可以作为通用 Web 服务被任何 HTTP 客户端访问。

典型应用场景包括:

  • 数据处理 API:接收外部请求,完成清洗、转换、统计等操作,并将结果写入数据库或直接返回;

  • 封装内部算法或小模型:把团队已有算法封装成标准 API,供 Agent 或其他系统按工具方式调用;

  • Webhook / 事件接收端:接收 GitHub、支付网关、业务系统等外部事件,作为 Agent 的触发入口。

使用前准备

在创建代码工具前,建议先完成以下准备:

  1. 准备代码工程

    • 可以使用官方 Demo 代码包(控制台“下载 Demo 示例文件”),或自有代码;

    • 确认主入口文件、启动命令和服务端口(如 python mcp_server.py + 8080)。

  2. 准备运行时依赖

    • 确认使用的运行时语言版本(如 Python 3.10);

    • 代码包模式:将代码和依赖一起打包为 zip(依赖一般放在约定目录,如 /python 等);

    • 容器镜像模式:在镜像中预置运行环境与依赖,并配置好服务入口。

  3. 准备访问凭证

    • 如希望调用方通过 API Key 鉴权访问工具,请在凭证管理中准备好凭证。

操作步骤

步骤1:选择创建方式与基本信息

  1. 登录AgentRun 控制台,在顶部菜单栏,点击其他

  2. 在左侧目录选择工具管理,单击创建工具

  3. 选择创建方式区域选择代码创建

  4. 基本信息区域填写:

    • 工具名称:如 tool-4geek,建议使用有意义、可区分的名称;

    • 工具描述:简要说明工具的功能用途,便于后续管理和协作。

步骤2:代码创建配置

代码创建配置区域,依次完成工具类型代码来源运行时选择。

  1. 工具类型
    工具类型下拉中选择工具协议类型(当前支持):

    • MCP 工具:MCP 协议工具,适合接入 AgentRun 和其他支持 MCP 的 Agent;

    • Function Call:函数调用工具,适合与支持 Function Calling 的模型配合使用。
      本示例以MCP 工具为例。

  2. 代码来源
    代码来源中选择代码的来源方式:

    • 上传文件:从本地上传 zip 包;

    • OSS 存储:从 OSS Bucket 中加载代码包;

    • 容器镜像:使用已有镜像中内置的代码;

    • 在线编码:使用在线编辑器直接编写代码。

    选择上传文件时:

    • 点击“点击上传文件”,选择本地 zip 包;

    • 支持 ZIP 格式,最大 100MB;

    • 如需参考官方示例,可点击下载 Demo 示例文件,该代码示例的运行时版本为Python 3.10,在本地修改后再上传。

  3. 运行时
    在「运行时」下拉中选择语言环境,例如:

    • Python 3.10
      根据实际代码环境选择相应运行时版本。

步骤3:启动配置

启动配置区域,配置工具服务的启动方式:

  • 启动命令

    • 示例:python main.py

    • 对应代码包中的主入口文件。

    • 若使用官方 Demo,一般默认即可;如使用自定义代码,请根据实际入口文件修改。

  • 服务端口:只对SSE以及Streamable HTTP协议的MCP工具生效。

    • 示例:8080

    • 必须与代码中实际监听的端口一致。

    • 推荐在代码中从环境变量读取端口,便于后续调整。

步骤4:传输协议与路径

传输协议区域,配置 MCP 服务的传输方式:

  • 传输协议(下拉可选):

    • STDIO:通过标准输入输出进行通信(适用于 MCP 标准 STDIO 模式);

    • SSE:Server-Sent Events 推送模式;

    • Streamable HTTP:HTTP 流式模式。

  • 路径(部分协议需要):

    • 对于 STDIO 协议,如果使用 SSE 网关转发,需要配置一个 SSE 路径,例如:/sse

    • 控制台默认值为 /sse,如有特殊需求可自行修改。

请根据你实际实现的 MCP Server 协议选择对应的项。例如:

  • 若使用 FastMCP 的 STDIO 模式,可以选择 STDIO

  • 若使用基于 HTTP+SSE 的 Server 实现,可以选择 SSE 或 Streamable HTTP 并填写路径。

步骤5:资源配置

资源配置区域,设置工具实例的计算资源与超时时间,可根据工具复杂度和预期负载进行调整。:

  • CPU(核)/内存(GB):CPU/内存决定单实例的处理能力;

  • 超时时间(秒):超时时间为单次请求的最长执行时长,超时后会自动中断请求。

步骤6:环境变量配置

环境变量区域,你可以以表单模式或JSON 模式配置环境变量:

  • 示例:

    • ENV = prod

    • DB_URL = xxx

环境变量会在工具代码运行时注入,可用于:

  • 指定下游服务地址、数据库连接等;

  • 配置日志级别、运行模式等。

如果使用官方 Demo,请参考 Demo 说明决定是否需要额外的环境变量;如果使用自定义代码,按实际需要配置即可。

步骤7:执行角色配置

执行角色配置区域,选择工具运行时使用的执行角色 ARN

  1. 在下拉框中选择已有角色;

  2. 如没有合适的角色,可点击右侧image按钮,跳转至 RAM 角色列表创建新角色:

    • 信任主体:函数计算(fc.aliyuncs.com);

    • 创建完成后,为角色授予所需策略,例如:

      • AliyunOSSFullAccess:访问 OSS;

      • AliyunVPCFullAccess:访问 VPC 内网资源;

      • 以及其他与业务相关的权限策略。

工具在运行时将以该角色身份调用云服务,请根据最小权限原则为角色赋权。

步骤 8:网络配置与 OSS 存储挂载(可选)

网络配置OSS 存储挂载区域,按需设置:

  1. 网络配置

    • VPC ID:选择需要访问的 VPC;

    • 子网 ID(交换机):选择对应交换机;

    • 安全组:选择安全组,用于控制入/出方向的网络访问规则。

    如工具需要访问内网的数据库、应用服务等,请在此处绑定合适的 VPC/子网,并确保安全组放行目标地址。

  2. OSS 存储挂载(如有需要)

    • 在此区域配置 OSS 挂载。

    • 请注意:必须先在“执行角色”中授予 OSS 访问权限,才能正常使用挂载。

步骤 9:访问认证配置

在页面底部访问认证区域,可以为工具服务配置访问凭证:

提示:目前工具只支持 API Key 类型的凭证。
  1. 点击入站:访问凭证,进入访问认证配置;

  2. 选择使用已有凭证或点击image参考凭证管理创建新的 API Key;

  3. 完成后,调用方在访问工具 HTTP 接口时需携带该 API Key,才能通过认证。

如仅用于内部测试,可以暂时不启用访问认证,但不建议在生产环境中关闭鉴权。

步骤 10:保存并创建

  1. 确认上述配置无误后,点击页面右上角创建工具

  2. 平台会自动完成函数创建和部署;

  3. 部署成功后,可以在工具详情页看到工具的运行信息和调用入口,并可进一步进行:

示例代码说明(MCP 工具)

以下是一个最小化的 MCP 工具示例,基于 fastmcp 框架实现:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("My App")

@mcp.tool()
async def hello() -> str:
    """Return string 'Hello World!'"""
    print("hello tool called")
    return "Hello World!"

if __name__ == "__main__":
    print("STDIO server started")
    mcp.run()
    

说明:

  • FastMCP("My App"):创建一个 MCP Server 实例;

  • @mcp.tool():将 hello 函数暴露为 MCP 工具;

  • mcp.run():以 STDIO 方式启动 MCP Server;

  • 在控制台中将传输协议选择为 STDIO 时,可直接配合此示例使用。

对于 SSE / HTTP Streamable 模式,可参考官方 Demo 项目的 README 与入口代码(如基于 Starlette/Uvicorn),只需修改对应“传输协议”和“路径”即可。

常见问题

Q1:工具启动失败,提示端口占用或访问不到?

  • 确认代码服务监听的是 0.0.0.0,而不是 127.0.0.1

  • 确认监听端口与你在“服务端口”中配置的值一致;

  • 如使用容器镜像,确认 Dockerfile 中暴露的端口与控制台配置一致。

Q2:调用工具时返回 401 / 鉴权失败?

  • 检查“访问认证”是否启用 API Key;

  • 确认调用方在请求头中正确携带了 API Key。

Q3:工具需要访问 OSS/VPC 资源但报权限错误?

  • 检查“执行角色 ARN”是否包含 AliyunOSSFullAccessAliyunVPCFullAccess 等必要策略;

  • 如使用 OSS 挂载,还需确保在“OSS 存储挂载”中正确配置挂载信息。