tai-mcp
tai-mcp 是一个仅通过 stdio 运行的本地 MCP,把 tai-openapi 的 OpenAI 兼容图片生成和
编辑接口封装为 MCP 工具。它不监听端口,也不提供 HTTP、鉴权、CORS、健康检查或 Docker
部署入口。
工具
generate_image:调用POST /v1/images/generations生成图片。edit_image:调用POST /v1/images/edits编辑一张或多张图片。get_image_model_capabilities:查询编辑模型的图片数量、mask、size 和扩展参数约束。list_image_models:列出上游当前启用的模型。
生成和编辑都支持 response_format="url"(默认)与 response_format="b64_json":
url:MCP 返回包含上游图片 URL 的 JSON 文本,不下载图片。b64_json:MCP 返回标准ImageContent和图片元数据。
图片编辑输入
edit_image.images 是有序的本地图片绝对路径列表,mask 是可选的本地图片绝对路径。
支持 PNG、JPEG 和 WebP。MCP 在本机读取文件,再通过 OpenAI 兼容的 multipart image[]
和 mask 文件字段上传到 tai-openapi,图片内容不经过 MCP JSON/base64 传输。
路径必须满足以下条件:
- 使用普通文件系统绝对路径,例如
C:\Users\me\Pictures\source.png;不要使用file://; - 最终解析路径位于
MCP_ALLOWED_IMAGE_ROOTS配置的目录中; - 文件扩展名和实际图片格式一致;
- 单个文件不超过
MCP_MAX_IMAGE_BYTES。
相对路径、HTTP URL、base64 和 Data URL 不再作为编辑输入接受。
示例:
{
"prompt": "Make the bodywork brighter",
"images": [
"C:\\Users\\me\\Pictures\\car.png",
"C:\\Users\\me\\Pictures\\reference.png"
],
"model": "tai-image-to-image",
"response_format": "url",
"parameters": {"denoise": 0.55}
}
编辑前建议先调用 get_image_model_capabilities(model),按返回的 input.min_images、
input.max_images、input.mask、input.size、input.prompt_required 和
parameters_schema 组织参数。
安装与配置
要求 Python 3.12+ 和 uv。
Copy-Item .env.example .env
uv sync --extra dev
在 .env 中至少配置现有的 TAI_OPENAPI_* 变量:
TAI_OPENAPI_BASE_URL=http://127.0.0.1:8000/v1
TAI_OPENAPI_API_KEY=replace-with-tai-openapi-api-key
TAI_IMAGE_MODEL=tai-text-to-image
TAI_IMAGE_EDIT_MODEL=tai-image-to-image
MCP_ALLOWED_IMAGE_ROOTS=C:\Users\me\Pictures
| 环境变量 | 默认值 | 说明 |
|---|---|---|
TAI_OPENAPI_BASE_URL |
http://127.0.0.1:8000/v1 |
OpenAI 兼容接口地址,必须以 /v1 结尾 |
TAI_OPENAPI_API_KEY |
无 | 上游 Bearer Token,必填 |
TAI_IMAGE_MODEL |
tai-text-to-image |
generate_image 默认模型 |
TAI_IMAGE_EDIT_MODEL |
tai-image-to-image |
edit_image 默认模型 |
MCP_REQUEST_TIMEOUT_SECONDS |
330 |
上游请求总超时 |
MCP_CONNECT_TIMEOUT_SECONDS |
10 |
上游连接超时 |
MCP_MAX_IMAGE_BYTES |
20971520 |
单张输入图片和 b64_json 输出图片的最大大小 |
MCP_ALLOWED_IMAGE_ROOTS |
. |
允许读取图片的目录;Windows 使用分号分隔多个目录 |
本地运行与注册
直接启动 stdio MCP:
uv run python -m tai_mcp
注册到 Codex 时,让进程工作目录指向本项目,以便读取 .env:
codex mcp add tai-images -- `
powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Bypass `
-File C:\path\to\tai-mcp\run-stdio.ps1
不要把真实 API Key 写入 .env.example、Codex 命令参数、Git 或日志。
测试
uv run --extra dev python -m pytest
uv run --extra dev python -m ruff check .
uv run --extra dev python -m ruff format --check .
Metadata
Release files for tai-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tai_mcp-0.1.0.tar.gz | 15.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tai_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.7 kB
Release files / tai_mcp-0.1.0.tar.gz
| Download URL | tai_mcp-0.1.0.tar.gz |
|---|---|
| Size | 15.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9f70c15b1ee465b1c7ad69fc37e5f8c478ffa3de90d77d671889669a5a431c12
|
|
BLAKE2b-256 checksum How to use checksums |
30c9e7b8527ef64c9aef9abd2f9993cc8c9aa3c6f1197bdf3937bc6b6d79deaa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / tai_mcp-0.1.0-py3-none-any.whl
| Download URL | tai_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
76897d3fd3aaf3895af9a849180042ba3fecb7f58d7022ac85263a72c064923e
|
|
BLAKE2b-256 checksum How to use checksums |
9fa76000de4b91c6cce17762f6a3b61a291927b6852caef176e261495b5738ff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|