Skip to main content

Keystone 平台 MCP Service SDK(Python)

Project description

ks-app-sdk (Python)

Keystone 平台 MCP Service SDK(Python 版)。

安装

pip install ks-app-sdk>=0.3.0

快速上手

from ks_app import App

app = App(
    "my-app",
    keystone_auth=True,           # 启用 JWKS strict-by-default
    version="0.1.0",
    manifest_path="manifest.yaml",
)


@app.tool("greet", "打招呼")
async def greet(name: str = "world"):
    return {"message": f"Hello, {name}!"}


# 可选:挂 /config-ui/ 静态前端
# app.mount_config_ui("./web/dist")

# 可选:扩展健康检查
# app.health_check("db", check_db_connection)

if __name__ == "__main__":
    app.run()

鉴权

启用 keystone_auth=True 后,对 /mcp 前缀的请求会强制 JWKS RS256 JWT 验签。

环境变量:

变量 说明
KEYSTONE_JWKS_URL 生产必须设置,指向 Keystone 的 .well-known/jwks.json
KS_APP_AUTH_MODE=insecure 本地开发降级为裸跑(跳过所有鉴权)
KS_APP_PORT / KS_APP_HOST 进程监听配置

strict-by-default:若 keystone_auth=TrueKEYSTONE_JWKS_URL 未配置, app.create_app() 会抛 AuthResolveError。生产意外漏配时立即暴露,不会静默裸跑。

在工具 handler 中读取 JWT claims:

from ks_app import get_claims


@app.tool("whoami", "查当前用户")
async def whoami():
    claims = get_claims()
    return {"sub": claims.get("sub") if claims else None}

运行时上下文(ToolContext)

tools/call 调用期间,Keystone 通过 MCP _meta 字段透传运行时元信息; handler 通过 get_context() 非侵入式获取,函数签名无需变更。

字段 来源 _meta 键 用途
resource_scope ks_resource_scope 多租户隔离作用域(dict 形式,业务侧 json.loads 还原)
execution_id ks_execution_id 当前执行 ID
task_id ks_task_id 当前任务 ID
task_name ks_task_name 当前任务名称
trigger_type ks_trigger_type 触发类型(manual / cron / webhook / event
agent_id ks_agent_id v0.4.0 新增:当前 keystone agent ID(审计)
user_id ks_user_id v0.4.0 新增:当前 keystone user ID(审计)
request_id ks_request_id v0.4.0 新增:当前 keystone 请求 ID(审计 / 链路追踪)

未注入时所有字段返回空字符串("")而非 None

from ks_app import get_context


@app.tool("read_doc", "读文档")
async def read_doc(path: str):
    ctx = get_context()
    # v0.4.0:写审计日志使用 agent_id / user_id / request_id
    audit_log.info(
        "read_doc",
        agent_id=ctx.agent_id,
        user_id=ctx.user_id,
        request_id=ctx.request_id,
        path=path,
    )
    return {"content": ...}

端点

路径 方法 说明
/healthz GET 存活探针(聚合自定义 health_check
/readyz GET 就绪探针
/meta GET 应用元信息(对齐 ks-types.MetaResponse
/mcp POST MCP Streamable HTTP,JSON-RPC 2.0
/mcp/tools/list GET 工具列表(legacy)
/mcp/tools/call POST 调用工具(legacy)
/config-ui/* GET 前端静态资源(调用 mount_config_ui 后挂载)

配置

环境变量 默认值 说明
KS_APP_PORT 8080 监听端口
KS_APP_HOST 0.0.0.0 监听地址
KEYSTONE_JWKS_URL JWKS 端点;keystone_auth=True 必配
KS_APP_AUTH_MODE insecure 时强制跳过鉴权

依赖

  • uvicorn>=0.30
  • starlette>=0.37
  • pyyaml>=6.0
  • PyJWT[crypto]>=2.8.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ks_app_sdk-0.6.0.tar.gz (154.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ks_app_sdk-0.6.0-py3-none-any.whl (110.8 kB view details)

Uploaded Python 3

File details

Details for the file ks_app_sdk-0.6.0.tar.gz.

File metadata

  • Download URL: ks_app_sdk-0.6.0.tar.gz
  • Upload date:
  • Size: 154.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for ks_app_sdk-0.6.0.tar.gz
Algorithm Hash digest
SHA256 589060fdeb0fd5525703407115e823b9cab99e400253622278ef302c67983b73
MD5 01255f15da356fb99663e634c23464ce
BLAKE2b-256 f343a07383abdff41101787e8a018c69d5193c6333058cc287bf2d70feff7c25

See more details on using hashes here.

File details

Details for the file ks_app_sdk-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: ks_app_sdk-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 110.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for ks_app_sdk-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5ed1f4f9b084d0d77f5a6d7e815a909787994b7d2e8506f026b747b20aa5b476
MD5 e5b79d86990e307c6bd9e852001d299e
BLAKE2b-256 53e7d056a1d98562d47505eb5e5a9f54053fa8d7aa08af59fd03660be8e0fdd2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page