Token导航 LogoToken导航

MCP Server · 运维云端

Zig Utcp

zig-utcp是一个用于Zig语言的通用工具调用协议(UTCP)实现,支持多种传输协议和认证方法,适用于LLM工具集成。

未说明官方级别未说明来源级核验工具 0
多协议支持工具管理云端部署

快速开始

公开资料没有提供安装命令,按仓库或官方文档接入。
作者 / 组织
bkataru
提供方
bkataru

工具数量

0

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

2

仓库热度

收录来源

1 个

MCP World

选型结论

Zig Utcp 属于运维云端类 MCP Server,公开资料标注 0 个工具,通过传输方式未标注接入,客户端适配情况以官方文档为准,没有现成的安装命令;接入前先确认权限范围。

分类

运维云端

传输方式

未说明

认证方式

无需认证

部署方式

公开资料未说明

安装与配置

公开目录没有给出安装命令,需要按仓库 README安装;下面按同类条目的通用流程说明。

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    先确认运行方式

    公开资料没有标注传输方式,先看仓库 README,确认是本地进程还是远程地址。

  2. 2

    获取服务

    公开目录没有给出安装命令,按仓库 README里的步骤安装或获取服务。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 0 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

公开资料仍需确认:安装命令

详细介绍

zig utcp

通用工具调用协议(UTCP) Zig 0.15.2的实现+

LLM工具集成的供应商无关标准,支持HTTP、CLI、MCP、SSE、WebSocket等。

特性

  • 零依赖 -仅限纯Zig标准库
  • 显式错误处理 -Zig错误接头(无例外)
  • Comptime多态性 -通过以下方式进行通用传输 comptime
  • 9运输类型 -HTTP、CLI、MCP、SSE、WebSocket、文本、UDP、GraphQL、gRPC
  • 4认证方法 -API密钥,基本,承载,OAuth2(带令牌刷新)
  • 2台工具装载机 -JSON、OpenAPI
  • 流媒体 -增量响应处理
  • 后置处理器 -响应转换和验证
  • 内存效率高 -请求/响应生命周期的竞技场分配器

v0.2.0中的新功能

  • CLI工具 - utcp 测试工具定义命令
  • 中间件 -用于日志记录、度量、身份验证注入的请求/响应拦截器
  • 断路器 -通过自动恢复防止级联故障
  • 速率限制 -令牌桶、滑动窗口和固定窗口算法
  • 响应缓存 -基于TTL的缓存,具有可配置的最大条目
  • 批量请求 -并行执行多个工具调用
  • 调试模式 -详细记录请求/响应时间
  • 模式验证 -根据JSON模式验证工具输入
  • 模拟运输 -无需网络调用的单元测试
  • 重试策略 -瞬态故障时具有抖动的指数回退
  • 基准测试 -性能回归测试 zig build bench
  • API文件 -生成文档 zig build docs

需求

  • Zig 0.15.2或更高版本

安装

选项1:使用 zig fetch (推荐)

zig fetch --save git+https://github.com/bkataru/zig-utcp.git

要获取特定版本,请执行以下操作:

zig fetch --save git+https://github.com/bkataru/zig-utcp.git#v0.1.0

选项2:手动配置

添加到您的 build.zig.zon:

.dependencies = .{
    .utcp = .{
        .url = "git+https://github.com/bkataru/zig-utcp.git",
        .hash = "...", // Run `zig build` to get the correct hash
    },
},

选项3:本地路径依赖

.dependencies = .{
    .utcp = .{
        .path = "../zig-utcp",
    },
},

配置 build.zig

const std = @import("std");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});
    const optimize = b.standardOptimizeOption(.{});

    // Fetch the utcp dependency
    const utcp_dep = b.dependency("utcp", .{
        .target = target,
        .optimize = optimize,
    });

    // Get the module from the dependency
    const utcp_mod = utcp_dep.module("utcp");

    // Create your executable
    const exe = b.addExecutable(.{
        .name = "my_tool_client",
        .root_module = b.createModule(.{
            .root_source_file = b.path("src/main.zig"),
            .target = target,
            .optimize = optimize,
        }),
    });

    // Add the utcp import to your executable
    exe.root_module.addImport("utcp", utcp_mod);

    b.installArtifact(exe);
}

从源头构建

# Clone the repository
git clone https://github.com/bkataru/zig-utcp.git
cd zig-utcp

# Build the library
zig build

# Run tests
zig build test

# Build examples
zig build examples

# Build release version
zig build -Doptimize=ReleaseFast

快速开始

const std = @import("std");
const utcp = @import("utcp");

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    // Create HTTP transport
    var transport = utcp.HttpTransport.init(allocator);
    defer transport.deinit();
    try transport.loadEnv();

    // Define a tool
    const weather_tool = utcp.Tool{
        .id = "weather_api",
        .name = "Get Weather",
        .description = "Fetch current weather for a city",
        .call_template = .{
            .http = .{
                .method = "GET",
                .url = "https://wttr.in/{city}?format=j1",
                .timeout_ms = 30000,
            },
        },
    };

    // Prepare request
    var inputs_obj = std.json.ObjectMap.init(allocator);
    defer inputs_obj.deinit();
    try inputs_obj.put("city", .{ .string = "London" });

    const request = utcp.ToolCallRequest{
        .tool_id = "weather_api",
        .inputs = .{ .object = inputs_obj },
    };

    // Call the tool
    const response = try transport.call(weather_tool, request, null);
    std.debug.print("Response: {any}\n", .{response.output});
}

例子

运行附带的示例:

# HTTP client (calls wttr.in weather API)
zig build run-http

# CLI client
zig build run-cli

# MCP client
zig build run-mcp

# Streaming example
zig build run-streaming

# Post-processor example
zig build run-postprocessor

# OAuth2 example
zig build run-oauth2

# UTCP CLI tool
zig build run-utcp -- help
zig build run-utcp -- info
zig build run-utcp -- load tools.json

看 examples/ 查看完整的工作示例。

API 参考

核心类型

类型描述
Tool带有id、名称、描述、call_template的工具定义
ToolCallRequest带有tool_id和输入的请求
ToolCallResponse带有输出和可选错误的响应
Provider具有身份验证配置的提供程序
CallTemplate特定于传输的呼叫配置

运输

运输说明
HttpTransport支持OAuth2的HTTP/HTTPS
CliTransportCLI子流程执行
McpTransportMCP JSON-RPC(标准输入+HTTP模式)
SseTransport服务器发送的事件
WebSocketTransportWebSocket连接
TextTransport文本输出(plain/json/xml)
UdpTransportUDP数据报
GraphqlTransport基于HTTP的GraphQL
GrpcTransportgRPC Web兼容

装载机

加载器说明
loadToolsFromJson从JSON加载工具
convertFromString将OpenAPI规范转换为UTCP工具

流媒体

const stream = utcp.fromBytes(allocator, data);
defer stream.deinit();

while (stream.next()) |chunk| {
    // Process chunk
    if (chunk.is_final) break;
}

后置处理器

var chain = utcp.PostProcessorChain.init(allocator);
defer chain.deinit();

try chain.addFn("trim", utcp.trimProcessor);
try chain.addFn("log", utcp.logProcessor);
try chain.process(&response);

中间件

var chain = utcp.MiddlewareChain.init(allocator);
defer chain.deinit();

// Add logging middleware
try chain.add(.{
    .name = "logger",
    .on_request = logRequest,
    .on_response = logResponse,
});

// Process request through middleware
try chain.processRequest(&context);
const response = try transport.call(tool, request, provider);
try chain.processResponse(&context, &response);

断路器

var breaker = utcp.CircuitBreaker.init(.{
    .failure_threshold = 5,
    .reset_timeout_ms = 30000,
});

if (breaker.canExecute()) {
    const result = transport.call(tool, request, provider);
    if (result) |resp| {
        breaker.recordSuccess();
    } else |_| {
        breaker.recordFailure();
    }
}

速率限制

var limiter = utcp.TokenBucket.init(.{
    .burst_size = 100,
    .refill_rate = 10.0, // tokens per second
});

if (limiter.tryAcquire()) {
    // Proceed with request
} else {
    // Rate limited
}

响应缓存

var cache_inst = utcp.ResponseCache.init(allocator, .{
    .max_entries = 1000,
    .default_ttl_ms = 300000, // 5 minutes
});
defer cache_inst.deinit();

// Check cache
if (cache_inst.get(cache_key)) |cached| {
    return cached;
}

// Make request and cache
const response = try transport.call(tool, request, provider);
try cache_inst.put(cache_key, response);

模拟运输(测试)

var mock = utcp.MockTransportBuilder.init(allocator)
    .expectCall("weather_api", .{ .output = .{ .string = "{\"temp\":20}" } })
    .expectCall("translate", .{ .output = .{ .string = "Bonjour" } })
    .build();
defer mock.deinit();

const response = try mock.call(tool, request, null);
try mock.verify(); // Fails if expectations not met

建筑

src/
├── core/              # Core types
│   ├── tool.zig       # Tool, ToolCallRequest, ToolCallResponse
│   ├── provider.zig   # Provider, Auth types
│   ├── errors.zig     # Error types
│   ├── substitution.zig  # Variable substitution
│   ├── streaming.zig  # Streaming responses
│   ├── postprocessor.zig # Post-processors
│   ├── middleware.zig # Request/response interceptors
│   ├── circuit_breaker.zig # Circuit breaker pattern
│   ├── rate_limit.zig # Rate limiting algorithms
│   ├── cache.zig      # Response caching
│   ├── batch.zig      # Batch request execution
│   ├── validation.zig # JSON Schema validation
│   ├── debug.zig      # Debug logging
│   ├── retry.zig      # Retry policies
│   └── mock.zig       # Mock transport for testing
├── repository/
│   └── memory.zig     # InMemoryToolRepository with search
├── transports/        # Transport implementations
├── loaders/           # Tool loaders (JSON, OpenAPI)
├── cli.zig            # CLI tool
└── utcp.zig           # Public API

看 docs/ARCHITECTURE.md 详细设计。

项目状态

Go/Rust/TypeScript实现的100%特性奇偶校验

组件状态
HTTP传输✅ 完成
CLI传输✅ 完成
MCP运输✅ 完成
苏格兰和南方能源公司运输✅ 完成
WebSocket传输✅ 完成
文本传输✅ 完成
UDP传输✅ 完成
GraphQL传输✅ 完成
gRPC Web传输✅ 完成
所有认证方法✅ 完成
JSON/OpenAPI加载器✅ 完成
流媒体✅ 完成
后置处理器✅ 完成
CI/CD✅ 完成

贡献

欢迎投稿!请随时提交拉取请求。

许可证

MIT许可证-请参阅 许可证 了解详情。

相关项目

工具与能力

工具数量

0

资源数量

0

提示词数量

0

能力标签

Zig本地部署LLM工具集成多协议支持Zig开发API调用工具管理

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

看服务状态

查询容器、日志和监控指标,定位异常。

执行部署变更

在权限范围内触发发布、回滚和环境切换。

核对资源用量

汇总用量,找出闲置和超额的部分。

选择建议

值得选的地方

  • 只提供 0 个工具,职责集中,接入后不容易误操作。
  • 公开说明写得比较完整,接入前能看清能力边界。

先想清楚的地方

  • 公开资料没有可直接复制的安装命令,第一次接入要自己找入口。
  • 第三方目录整理,版本更新和行为细节以官方仓库为准。

更适合

  • 需要在运维云端场景里让模型直接调用外部能力的人。
  • 愿意照着官方文档一步步配环境的人。

不太适合

  • 希望一条命令就装好、不想看文档的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
Zig Utcp

MCP World · 本页

0未说明未标注1 个2026-05-17
Ui Tars Desktop 8a825770

MCP World

0stdio有1 个2026-05-17
Elie222 MCP

MCP World

0未说明未标注1 个2026-05-17
Arizeai Phoenix MCP

MCP World

0stdio有3 个2026-05-17
Unity MCP 87ee506e

MCP World

42HTTP有2 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

Zig Utcp 怎么安装?

公开目录没有给出可以直接复制的安装命令,需要按仓库 README里的步骤安装;装好后写进客户端的 MCP 配置再重启。

Zig Utcp 怎么在 Claude Desktop、Cursor 里配置?

它是传输方式未标注,客户端配置里要写启动命令和参数,运行环境是 未标注;保存后完全退出客户端再打开,配置才会生效。

Zig Utcp 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

Zig Utcp 需要 API Key 吗?

公开资料标注为无需认证,装好就能连;如果实际调用时报鉴权错误,按官方文档补上凭据。

Zig Utcp 支持哪些客户端?

公开资料没有标注具体客户端;能配置本地 MCP 命令的客户端都能接,配置方式参照官方文档。

来源信息

继续浏览同类 MCP