mcpField
G
Golf

Golf

本地服务
golf.dev开发工具8407 周前更新

关于 Golf

Golf 是一个用于构建 MCP 服务的 Python 框架,通过约定目录结构自动发现并编译工具、提示词和资源。它面向需要认证、可观测性和运行时支持的 AI Agent 后端开发者。

主要功能

  1. 01基于目录结构自动发现组件
  2. 02工具、提示词与资源的文件化定义
  3. 03JWT 与 OAuth Server 认证配置
  4. 04可选的 OpenTelemetry 追踪
  5. 05命令行脚手架与开发服务器

适用场景

  1. 01快速搭建 Python MCP 服务
  2. 02为 AI Agent 提供需要认证的工具接口
  3. 03通过 OpenTelemetry 监控 MCP 服务运行情况

MCP 相关

Golf 用于构建 MCP 服务端,将 tools、prompts 和 resources 暴露给 MCP 客户端,并支持 streamable-http 与 stdio 传输方式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Golf 横幅


⛳ Golf

构建 MCP 服务最简单的框架

许可证 欢迎提交 PR 支持

📚 文档

概述

Golf 是一个旨在简化 MCP 服务应用创建流程的框架。开发者可以在规范的目录结构中,将服务端的功能——工具、提示词和资源——定义为简单的 Python 文件。随后,Golf 会自动发现、解析并编译这些组件,生成可运行的 MCP 服务,减少样板代码并加快开发速度。

Golf 面向 FastMCP 4.0.0 和当前的 MCP 2026-07-28 协议。 FastMCP 也会通过兼容模式与旧版 MCP 客户端协商。

Golf v0.2.0 提供企业级身份验证(JWT、OAuth 服务端、开发令牌)、用于大模型交互的内置实用工具以及自动遥测集成。你可以专注于实现 Agent 逻辑,而由 Golf 负责身份验证、监控和服务端基础设施。

快速开始

只需几个简单步骤,即可启动并运行 Golf 项目:

1. 安装 Golf

Golf 需要 Python 3.10 或更高版本。然后使用 pip 安装 Golf:

pip install golf-mcp
2. 初始化项目

使用 Golf CLI 搭建新项目的脚手架:

golf init your-project-name

此命令会创建一个新目录(your-project-name),其中包含基本的项目结构,包括示例工具、资源以及 golf.json 配置文件。

3. 运行开发服务端

进入新项目目录并启动开发服务端:

cd your-project-name
golf build dev
golf run

这将启动 MCP 服务,通常运行在 http://localhost:3000(可在 golf.json 中配置)。

就是这样!你的 Golf 服务已启动并可供集成。

基本项目结构

通过 golf init 初始化的 Golf 项目,其结构如下所示:

<your-project-name>/
│
├─ golf.json          # Main project configuration
│
├─ tools/             # Directory for tool implementations
│   └─ hello.py       # Example tool
│
├─ resources/         # Directory for resource implementations
│   └─ info.py        # Example resource
│
├─ prompts/           # Directory for prompt templates
│   └─ welcome.py     # Example prompt
│
├─ .env               # Environment variables (e.g., API keys, server port)
└─ auth.py            # Authentication configuration (JWT, OAuth Server, API key, dev tokens)
  • golf.json:配置服务名称、端口、传输方式、遥测及其他构建设置。
  • auth.py:专用的身份验证配置文件(v0.2.0 新增,与 v0.1.x 的身份验证 API 不兼容),用于配置 JWT、OAuth 服务端、API 密钥或开发环境身份验证。
  • tools/、resources/、prompts/:包含你的 Python 文件,每个文件定义一个组件。这些目录也可以包含嵌套子目录,以便进一步整理组件(例如,tools/payments/charge.py)。每个文件的模块文档字符串将作为该组件的描述。
    • 组件 ID 会根据其文件路径自动生成。例如,tools/hello.py 会生成 hello,而像 tools/payments/submit.py 这样的嵌套文件会生成 submit_payments(先列出文件名,再按主类别下父目录的逆序排列,并用下划线连接)。

示例:定义工具

只需在 tools/ 目录中添加一个 Python 文件,即可创建新工具。样板项目中的示例 tools/hello.py 如下所示:

# tools/hello.py
"""Hello World tool {{project_name}}."""

from typing import Annotated
from pydantic import BaseModel, Field

class Output(BaseModel):
    """Response from the hello tool."""
    message: str

async def hello(
    name: Annotated[str, Field(description="The name of the person to greet")] = "World",
    greeting: Annotated[str, Field(description="The greeting phrase to use")] = "Hello"
) -> Output:
    """Say hello to the given name.
    
    This is a simple example tool that demonstrates the basic structure
    of a tool implementation in Golf.
    """
    print(f"{greeting} {name}...")
    return Output(message=f"{greeting}, {name}!")

# Designate the entry point function
export = hello

Golf 会自动发现此文件。模块文档字符串 """Hello World tool {{project_name}}.""" 将用作工具描述。Golf 会根据 hello 函数的签名推断参数,并使用 Output Pydantic 模型定义输出架构。该工具将注册为 ID hello。

身份验证与功能

Golf 提供企业级身份验证、内置实用工具和自动遥测:

# auth.py - Configure authentication
from golf.auth import configure_auth, JWTAuthConfig, StaticTokenConfig, OAuthServerConfig

# JWT authentication (production)
configure_auth(JWTAuthConfig(
    jwks_uri_env_var="JWKS_URI",
    issuer_env_var="JWT_ISSUER", 
    audience_env_var="JWT_AUDIENCE",
    required_scopes=["read", "write"]
))

# OAuth Server mode (Golf acts as OAuth 2.0 server)
# configure_auth(OAuthServerConfig(
#     base_url="https://your-golf-server.com",
#     valid_scopes=["read", "write", "admin"]
# ))

# Static tokens (development only)
# configure_auth(StaticTokenConfig(
#     tokens={"dev-token": {"client_id": "dev", "scopes": ["read"]}}
# ))

# Built-in utilities available in all tools
from golf.utilities import elicit, sample, get_current_context

在 MCP 2026-07-28 中,征询和采样采用由调用方负责的多轮控制流。嵌套辅助函数无法透明地继续执行包含它的工具:请在工具的返回类型中声明 InputRequiredResult,并原样返回任何此类结果。随后,工具会携带答案重新进入。旧版连接仍使用命令式请求。

from mcp_types import InputRequiredResult
from golf.utilities import sample

async def explain(topic: str) -> str | InputRequiredResult:
    result = await sample(f"Explain {topic}")
    if isinstance(result, InputRequiredResult):
        return result
    return result

JWT 身份验证需要受众,以便将令牌绑定到此 MCP 资源。绝不能将传入的 MCP JWT/OAuth Bearer 令牌转发到上游 API;请使用单独的上游凭证或基于标准的令牌交换/委派流程。

# Enable OpenTelemetry tracing
export OTEL_TRACES_EXPORTER="otlp_http"
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318/v1/traces"
golf run  # ✅ Telemetry enabled

📚 完整文档 →

配置

golf.json 中的基本配置:

{
  "name": "My Golf Server",
  "host": "localhost",
  "port": 3000,
  "transport": "streamable-http",
  "opentelemetry_enabled": false,
  "detailed_tracing": false
}
  • transport:使用 "streamable-http" 或 "stdio"。SSE 仅作为已弃用的旧版传输方式保留。
  • stateless_http:可选的旧版 Streamable HTTP 行为。MCP 2026-07-28 本身无会话,不依赖此设置。
  • opentelemetry_enabled:启用 OpenTelemetry 跟踪
  • detailed_tracing:捕获输入/输出(处理敏感数据时请谨慎)

隐私与遥测

Golf 会在 CLI 中收集匿名使用数据,以帮助我们了解框架的使用情况并持续改进。收集的数据包括:

  • 运行的命令(init、build、run)
  • 成功/失败状态(不含错误详情)
  • Golf 版本、Python 版本(仅主版本.次版本)和操作系统类型
  • 模板名称(仅适用于 init 命令)
  • 构建环境(仅适用于 build 命令,dev/prod)

绝不会收集个人信息、项目名称、代码内容或错误消息。

退出遥测

你可以通过多种方式禁用遥测:

  1. 使用遥测命令(推荐):

    golf telemetry disable
    

    此操作会永久保存你的偏好设置。如需重新启用:

    golf telemetry enable
    
  2. 运行任何命令时:添加 --no-telemetry 以保存你的偏好设置:

    golf init my-project --no-telemetry
    

你的遥测偏好设置存储在 ~/.golf/telemetry.json 中,并在所有 Golf 命令中持续生效。

在波兰华沙和旧金山倾心打造 ❤️

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。