mcpField
B
Benchline

Benchline

远程服务
benchline.fabwaseem.com开发工具05 天前更新

关于 Benchline

Benchline 是面向软件开发及相关任务的浏览器工具目录,涵盖数据、文档、SEO 和安全等领域。工具以纯函数形式同时提供网页界面和无状态 HTTP MCP 服务,无需 API 密钥。

主要功能

  1. 01可搜索的工具目录及分类标签
  2. 02代码与数据格式浏览器工具
  3. 03PDF、图像和音频处理
  4. 04SEO、爬虫与元数据检查
  5. 05安全、加密与网络工具
  6. 06无状态 HTTP MCP 和 HTTP API

适用场景

  1. 01格式化或校验 JSON 并转换数据
  2. 02在浏览器中编辑或转换 PDF 和图像
  3. 03检查公开网页的 SEO 与爬虫设置
  4. 04检查响应头、令牌或 DNS 记录

MCP 相关

Benchline 通过 /mcp 提供无状态 Streamable HTTP MCP 服务。无需 API 密钥或会话;除读取公开 URL 的任务外,工具输入均保留在设备上。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://benchline.fabwaseem.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

Benchline

Benchline

MIT 许可证 在线站点 MCP 端点 欢迎提交 PR fabwaseem/benchline MCP 服务

Benchline 是一个免费的浏览器工具目录,专为软件发布过程中那些小而精确的任务打造:JSON、PDF、图像、令牌、标头,以及爬虫可以引用的文件。每个工具都是纯函数,在网站上有对应页面,也可通过无状态 MCP 服务调用同一函数。除非工具的用途是读取公开 URL,否则工具输入都会保留在设备上。配置 Postgres 后,网站可以存储匿名使用次数;请参阅“隐私”。

在线体验: https://benchline.fabwaseem.com

截图

浅色模式下的目录深色模式下的目录
浅色模式下的 JSON 格式化工具深色模式下的 JSON 格式化工具

目录是首页。JSON 格式化工具是其中一个工具页面(/t/json-formatter)。

功能

  • 可搜索的目录,提供分类、标签和 ⌘K 命令面板。筛选在浏览器中运行。
  • 每个工具独立存放在一个文件夹中:包含元数据、客户端页面和由 vitest 覆盖测试的纯 lib/。
  • 位于 /mcp 的无状态 Streamable HTTP MCP 服务。无需 API 密钥,也无需会话。
  • 通过 POST /api/v1/tools/<slug> 使用相同的 HTTP 函数,并在 /openapi.json 提供 OpenAPI 文档。
  • /llms.txt 和 /llms-full.txt 均根据注册表生成。
  • 支持浅色和深色主题。圆角保持在较小的令牌范围内。

工具

toolOrder 中的所有工具。添加工具后运行 pnpm gen:readme-tools。

开发者

构建文件、日程安排,以及部署所依赖的小型程序。

Cron。 构建 cron 表达式并查看后续运行时间。

  • Cron 表达式构建器 — 构建或粘贴 cron 日程安排,以通俗易懂的语言查看其含义,并查看后续运行时间。

Next.js。 用于在容器中发布 Next.js 应用的生产文件。

Fixtures。 为架构生成占位文本和预置行。

  • Lorem ipsum — 根据种子生成占位文本,或以 JSON、CSV 和 SQL 格式生成虚拟行。

Regex。 使用示例测试 JavaScript 正则表达式。

  • Regex 测试器 — 测试 JavaScript 模式、查看分组并预览替换结果。

代码。 压缩并转换源代码。

  • 代码压缩器 — 压缩 JavaScript、CSS 和 HTML,并查看字节级节省量。
数据与格式

JSON、表格,以及在系统之间传输数据的编码格式。

JSON。 格式化 JSON 并将其转换为 YAML。

  • JSON 格式化工具 — 美化、压缩并验证 JSON;验证失败时显示准确的行号和列号。
  • JSON YAML 转换器 — 在浏览器中转换 JSON、YAML、TOML 和 XML;文档验证失败时保留行号。
  • JSON Schema — 从 JSON 推断 Schema、根据 Schema 验证,并导出 TypeScript 和 Zod。
  • JSONPath 测试器 — 使用 JSONPath Plus 查询 JSON 并检查每个匹配项。
  • JSON 转类型 — 粘贴 JSON,获取 TypeScript、Zod、Pydantic、dataclass 和 Go 类型。

表格。 将 CSV 转为 JSON,也可将 JSON 转为行。

  • CSV JSON 转换器 — 将 CSV 转为 JSON,也可将 JSON 转回 CSV,并可自选分隔符和标题行。

编码。 Base64 及字符串中隐藏的字节。

  • Base64 编解码器 — 对文本或文件进行 Base64 编码和解码,包括 URL 安全字母表。
  • 程序员计算器 — 进制转换、位运算和可点击的位网格。
  • ZIP 工具 — 完全在浏览器中创建 ZIP 压缩包并解压。

标记语言。 双向转换 Markdown 和 HTML。

  • Markdown HTML — 将 Markdown 转换为 HTML,或将 HTML 转回 Markdown,并提供实时预览。

SQL。 格式化查询,但不执行查询。

  • SQL 格式化工具 — 为 PostgreSQL、MySQL、BigQuery、Snowflake 和其他方言格式化 SQL。
SEO 与 AI 搜索

标记、爬虫,以及 AI 搜索引擎可以引用的文件。

AI 搜索。 决定 AI 爬虫可以抓取、引用和跳过哪些内容的文件与检查工具。

  • llms.txt 生成器 — 读取公开站点地图并编写 llms.txt 索引,还可选择生成 llms-full.txt。
  • AI SEO 检查器 — 评估爬虫访问权限、llms.txt、结构化数据,以及 AI 搜索使用的页面信号。
  • robots.txt 检查器 — 读取允许与禁止规则、站点地图链接,以及会导致 robots.txt 文件内容不实的问题。
  • 网页转 Markdown — 抓取公开网页并将文章转换为 Markdown。

SEO。 结构化数据,以及爬虫无需猜测即可引用的标记。

  • JSON-LD 架构生成器 — 填写表单,即可生成适用于 Article、FAQ、Product、Organization 等类型的有效 schema.org JSON-LD。
  • 站点地图验证器 — 检查站点地图 URL 或 XML,也可根据列表生成 urlset。

AI 开发。 发送提示词前,统计令牌数并估算费用。

  • AI 令牌计数器 — 统计令牌数并估算提示词在 GPT、Claude 和 Gemini 模型上的 API 费用。

社交媒体预览。 Open Graph 卡片、元标签,以及分享链接展开后的预览图。

  • OG 图片生成器 — 选择模板,查看卡片实时更新,然后下载 PNG 或复制 Next.js 文件。
  • OG 模板列表 — 浏览 Open Graph 模板 ID、字段和颜色预设。
  • 元标签检查器 — 从一个公开 URL 中读取标题、描述、规范链接、robots、Open Graph、Twitter 和 JSON-LD 类型。
  • 社交图片尺寸调整器 — 将任意照片调整为适用于 Instagram、YouTube、X、LinkedIn 和 Facebook 的精确尺寸,并按你选择的主体进行裁剪。
  • Meme 生成器 — 使用预设样式或你自己的图片,制作经典的顶部/底部字幕 Meme。
图片和媒体

在浏览器中转换、压缩和调整图片尺寸。文件保留在设备上。

图片。 在浏览器中转换、压缩和调整图片尺寸。文件保留在设备上。

  • 图片格式转换器 — 在浏览器中转换 HEIC、WebP、PNG、JPG 和 AVIF。不会上传任何内容。
  • 图片压缩器 — 在浏览器中缩小 JPEG、PNG、WebP 和 AVIF 图片,并查看压缩前后的实际大小。
  • 图片尺寸调整器 — 按像素或百分比调整尺寸,锁定宽高比,并支持批量打包为 ZIP。
  • 二维码和条形码读取器 — 从照片、粘贴的图片或摄像头读取二维码和条形码。
  • SVG 优化器 — 压缩 SVG、比较文件大小,并在未关闭此选项时保留 viewBox。
  • EXIF 查看器和移除器 — 读取照片元数据,包括 GPS 信息,并移除全部元数据或仅移除位置信息。
  • 图片裁剪器 — 使用自由裁剪框或宽高比预设进行裁剪,支持圆形裁剪。
  • 图片转文字 — 识别图片中的文字。OCR 模型只需下载一次,之后便会在此浏览器中运行。
  • 背景移除器 — 在浏览器中抠出人像,或清除纯色背景,无需下载。
  • 照片拼贴 — 将照片排列成网格布局,并导出高分辨率 PNG。

音频。 在浏览器中裁剪和调整音频。文件保留在设备上。

  • 音频裁剪器 — 从音频文件中裁剪片段。查看波形、拖动裁剪区域、添加淡入淡出,并导出 WAV。
PDF 和文档

在浏览器中合并、拆分、压缩和创建 PDF。文件保留在此设备上。

  • 合并 PDF — 在浏览器中合并 PDF。重新排序、保留每个文件中的指定页码范围,并下载合并后的文档。
  • 拆分 PDF — 提取页码范围,或将 PDF 拆分为单页或多个分段,然后下载 PDF 或 ZIP。
  • 压缩 PDF — 在浏览器中缩小 PDF。选择预设或目标大小,并比较压缩前后的文件。
  • 图片转 PDF — 将 JPG、PNG 和 WebP 图片转换为一个 PDF。设置页面尺寸、方向、边距和顺序。
  • PDF 转文本 — 读取 PDF 中可选择的文本;如果文本字号较大,则使用 Markdown 标题。
  • 旋转 PDF — 重新排序、旋转或删除页面,然后下载 PDF。
  • PDF 转图片 — 将 PDF 页面渲染为 PNG 或 JPEG,然后下载单张图片或 ZIP。
  • 保护 PDF — 添加 AES 密码,或在已知密码的情况下解锁 PDF。
  • 简历生成器 — 在浏览器中制作精美简历,包含个人资料、工作经历、教育背景和技能,并导出为格式整洁的 PDF。
  • PDF 签名 — 在浏览器中为 PDF 签名。手绘或输入签名,将其放置在任意页面,然后下载签署后的文件。
  • PDF 表单填写器 — 在浏览器中填写交互式 PDF 表单并导出。
安全与加密

令牌、哈希、密码,以及权限的组成部分。

身份验证调试。 读取 JSON Web Token、检查签名,并了解会话过期的原因。

  • JWT 解码器 — 粘贴 JSON Web Token,在浏览器中读取声明并验证签名。
  • TOTP 身份验证器 — 为你的账户生成实时 2FA 验证码,支持导入 otpauth:// 和导出 QR 码。

加密。 哈希、密码、UUID 和权限位。

  • 哈希生成器 — 为文本或文件生成 MD5、SHA-1、SHA-256 和 SHA-512 校验和,并支持 HMAC。
  • UUID 生成器 — 批量生成 UUID v4 或 v7,并读取 v7 ID 中存储的时间。
  • 密码生成器 — 生成加密级密码和密码短语,并提供熵强度计。
  • Chmod 计算器 — 将权限网格转换为八进制和符号形式的 chmod,反向转换也可以。
  • Bcrypt 哈希 — 使用 bcrypt 或 argon2id 对密码进行哈希和验证。不会存储任何内容。
  • 密钥对 — 生成 RSA、EC 和 Ed25519 密钥,并转换 PEM 和 JWK。
  • AES 加密 — 在浏览器中使用 AES-GCM 加密和解密,不会上传任何内容。

标头。 Content-Security-Policy 和浏览器强制执行的标头。

  • CSP 生成器 — 构建 Content-Security-Policy 和 Next.js 标头代码片段。
设计

颜色值、对比度,以及构成布局的标记。

  • 颜色转换器 — 将任意颜色转换为 HEX、RGB、HSL、OKLCH 和 CMYK,并检查对比度。
  • QR 码生成器 — 为文本、URL、Wi-Fi 或 vCard 创建静态 QR 码。设置颜色和纠错级别,然后下载 SVG 或 PNG。
  • Favicon 生成器 — 根据图片或字母生成 ICO、各种尺寸的 PNG、清单文件和 HTML 代码片段。
文本

计数、大小写,以及两段文本之间发生变化的行。

差异对比。 比较两段文本,查看发生变化的行。

  • 差异检查器 — 并排或内联比较两段文本,并下载统一补丁。

写作。 计数、大小写,以及标题或帖子必须符合的限制。

  • 字数统计器 — 统计单词数、字素数和阅读时间,并查看标题或帖子必须符合的限制。
  • 大小写转换器 — 转换为 camelCase、snake_case 和标题大小写,并支持 AP 和 Chicago 规则。
数学与金融

贷款、百分比、单位,以及计算日程所用的时间戳。

时间。 Unix 时间戳,以及两个日期之间的天数。

  • Unix 时间戳转换器 — 将纪元秒数或毫秒数转换为日期,也可将任意时区的日期转换为纪元时间。
  • 日期差计算器 — 计算两个日期之间的天数、周数和工作日数。

金融。 贷款还款计划和带小数舍入的百分比计算。

  • 贷款 EMI 计算器 — 计算每月分期金额和完整的摊销表,并四舍五入到美分。
  • 百分比计算器 — 计算百分比、百分比变化、反向百分比和利润率,并显示公式。
  • 发票生成器 — 在浏览器中创建发票和报价单。添加明细项目、税费和折扣,然后下载整洁的 PDF。
  • 货币转换器 — 实时汇率、历史趋势和多币种表格。

单位。 转换长度、质量、温度和数据大小。

  • 单位转换器 — 转换长度、质量、温度和数据大小,并将十进制单位与二进制单位分别处理。
网络

DNS、证书、响应头,以及构建请求所用的 URL。

URL。 对 URL 及其查询参数进行编码和解码。

DNS。 通过 HTTPS 查询公共 DNS 记录。

  • DNS 查询 — 通过 DNS-over-HTTPS 查询 A、AAAA、MX、TXT、CNAME 和 CAA 记录。

IP 和子网。 IPv4 和 IPv6 子网计算。

  • CIDR 计算器 — 计算 IPv4 和 IPv6 的网络地址、广播地址、主机范围,并检查地址是否属于该网段。

HTTP。 响应头、重定向,以及安全响应头评级。

  • HTTP 响应头 — 跟踪重定向,并为公共 URL 的安全响应头评级。
  • HAR 分析器 — 上传 HAR 捕获文件,查看时间都花在了哪里。
  • cURL 转换器 — 将任意 curl 命令转换为 fetch、Python、Go、PHP 或 Rust。
  • GraphQL 客户端 — 使用变量、请求头和历史记录查询任意 GraphQL 端点。
  • WebSocket 测试器 — 连接到任意 ws/wss 端点并检查实时帧。

TLS。 公共主机上的证书到期时间、证书链和名称。

  • SSL 检查器 — 检查 443 端口上证书的到期时间、名称和证书链。

在 AI Agent 中使用

服务地址为 https://benchline.fabwaseem.com/mcp。它通过 Streamable HTTP 使用 JSON-RPC,并以 JSON 作答(enableJsonResponse)。无需会话 ID。唯一支持的方法是 POST。可在 /mcp/guide 查看易读的设置指南。

Open Graph 需要两次调用。list_og_templates 会返回模板 ID、类别、默认值和字段架构。build_open_graph 接收模板 ID、该模板所用的字段、颜色、尺寸和可选图片,并返回 PNG 及 Next.js 文件。输入架构见 docs/MCP.md。

Cursor

~/.cursor/mcp.json

{
  "mcpServers": {
    "benchline": {
      "url": "https://benchline.fabwaseem.com/mcp"
    }
  }
}
Claude Desktop

打开 Claude Desktop,然后依次选择 Customize > Connectors,并添加自定义连接器。粘贴 https://benchline.fabwaseem.com/mcp。该服务无需登录。请按此方式设置。

若要将该 URL 桥接为 stdio 命令,请将以下内容放入 claude_desktop_config.json:

{
  "mcpServers": {
    "benchline": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://benchline.fabwaseem.com/mcp"]
    }
  }
}
VS Code

.vscode/mcp.json

{
  "servers": {
    "benchline": {
      "type": "http",
      "url": "https://benchline.fabwaseem.com/mcp"
    }
  }
}
curl

发送 content-type: application/json 和 accept: application/json, text/event-stream。无需先执行 initialize,以下两个调用即可对在线服务正常工作。

tools/list:

curl -sS -X POST https://benchline.fabwaseem.com/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

对 format_json 执行 tools/call:

curl -sS -X POST https://benchline.fabwaseem.com/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"format_json","arguments":{"json":"{\"a\":1}"}}}'

调用成功时会返回 result.structuredContent 和相同 JSON 的文本副本。调用失败时会返回 result.isError: true 和一条文本消息。

速率限制

/mcp 每个地址每分钟允许 60 个请求。POST /api/v1/tools/<slug> 有自己的速率限制,每分钟允许 60 个请求。地址取第一个 x-forwarded-for 跳点,否则取 x-real-ip。429 响应正文是 JSON-RPC 错误(Too many requests.),且响应会设置 retry-after。

如果请求包含 Origin,它必须与请求主机、localhost、127.0.0.1 或 https://benchline.fabwaseem.com(NEXT_PUBLIC_SITE_URL 来源)匹配。不包含 Origin 标头也可以,curl 就是如此。

文件输入

文件参数只能接受 url 或 data,不能同时提供两者。

  • data 可以是标准或 URL 安全的 base64,也可以是 data: URI。解码后的字节数上限为 10 MB。
  • url 必须是公共 http 或 https 地址,端口为 80 或 443,且不能包含用户名或密码。拒绝 localhost、*.local、*.internal 和 metadata.google.internal。系统会解析主机,并在任何地址属于环回、私有、链路本地、CGNAT(100.64.0.0/10)、组播范围或 IPv6 对应范围时拒绝请求。系统会手动跟随重定向,最多 4 次,并重新检查每个跳转。请求会在 15 秒后超时。声明或流式传输的正文超过 10 MB 时会被拒绝。

完整输入列表见 docs/MCP.md。

隐私

完全在浏览器中运行的工具会将文本、文件和结果保留在设备上。

以下工具可以通过本站获取公共 URL。页面会提交你输入的 URL 或主机名,路由会获取该地址,但不会将其写入任何位置;私有地址会被拒绝。这些路由每 10 分钟允许来自同一地址的 8 个请求。

  • llms.txt 生成器 — 读取公共站点地图并编写 llms.txt 索引,还可选生成 llms-full.txt。
  • AI SEO 检查器 — 评估爬虫访问情况、llms.txt、结构化数据,以及 AI 搜索使用的页面信号。
  • robots.txt 检查器 — 检查允许和禁止规则、站点地图链接,以及可能导致 robots.txt 文件失效的错误。
  • Meta 标签检查器 — 从一个公共 URL 读取标题、描述、规范链接、robots、Open Graph、Twitter 和 JSON-LD 类型。
  • 页面转 Markdown — 获取公共页面并将文章转换为 Markdown。
  • DNS 查询 — 通过 DNS-over-HTTPS 查询 A、AAAA、MX、TXT、CNAME 和 CAA 记录。
  • 站点地图验证器 — 检查站点地图 URL 或 XML,也可以根据列表生成 urlset。
  • HTTP 标头 — 跟随重定向并评估公共 URL 的安全标头。
  • SSL 检查器 — 检查端口 443 上证书的有效期、名称和证书链。
  • GraphQL 客户端 — 使用变量、标头和历史记录查询任意 GraphQL 端点。
  • WebSocket 测试器 — 连接到任意 ws/wss 端点并检查实时帧。
  • 货币转换器 — 查看实时汇率、历史趋势和多币种表格。
使用次数

设置 DATABASE_URL 后,服务会记录匿名数据:工具运行次数(MCP、POST /api/v1/tools/<slug> 和浏览器)、页面浏览量、工具打开次数、目录搜索文本,以及复制或下载点击次数。每次运行会记录时间、工具 slug、来源、结果、错误类别(例如 validation 或 timeout)、耗时和字节数。不会记录工具输入、工具输出、文件字节、提交的 URL 或原始 IP 地址。

这些数据的客户端地址取自 X-Real-Ip,若无则取 X-Forwarded-For 中的第一跳。Traefik 会根据 TCP 连接设置这两个字段。存储的地址为 sha256(ANALYTICS_SALT + UTC date + ip)。国家/地区信息是通过服务端查询该地址在 DB-IP IP to Country Lite 数据库(CC BY 4.0)所得的 ISO 代码。若该文件缺失,则国家/地区字段留空。只有查询无结果时,才会使用 CDN 国家/地区标头(cf-ipcountry 及其他边缘服务的同类标头)。用户代理会以类别形式存储(chrome、curl 等),引荐来源则存储为主机名。浏览器访客会在 localStorage 中获得一个随机的第一方 ID,并设置 bl_vid / bl_sid Cookie。

POST /api/track 接收浏览器信标。它会像 MCP 一样检查 Origin,忽略已知机器人和预取请求,将请求正文限制为 4 KB,并将每个地址的请求频率限制为每分钟 30 次。未知工具 slug 会被拒绝。看起来像 URL 或令牌的搜索文本会被丢弃。数据会排入内存队列,每隔几秒写入一次;缓冲区已满或数据库出错时,会丢弃该批数据并记录警告。数据库操作不会延迟工具响应。

GET /api/v1/stats 返回按工具、来源、结果和日期划分的总数,以及 MCP 客户端、国家/地区、错误率和 p50/p95 耗时。请发送 Authorization: Bearer <STATS_TOKEN>。令牌缺失或错误时会返回 404。筛选条件为 from、to、slug 和 source(最多 366 天;默认时间范围为 30 天)。

/admin 是用于同一数据库的私密面板。除非同时设置了 ADMIN_PASSWORD 和 ADMIN_SESSION_SECRET,否则会返回 404。密码比较采用恒定时间算法。登录成功后会设置一个由 HMAC 签名的 httpOnly、Secure、SameSite=Strict Cookie,有效期为 7 天。登录尝试会按 IP 哈希进行速率限制。页面和 CSV 导出均在服务端运行,绝不会向浏览器发送 STATS_TOKEN。管理路径会设置 noindex,不会列入站点地图和 robots 允许列表,也不会被记录为页面浏览量。查询近期记录时使用原始表;查询已汇总的日期时使用 analytics_daily,并设置 statement_timeout(ADMIN_QUERY_TIMEOUT_MS,默认值为 8s)。

超过 ANALYTICS_RETENTION_DAYS(默认值为 90 天)的原始记录会汇总到 analytics_daily 并删除。该任务会在启动时运行一次,此后每天运行一次;pnpm db:retain 可手动运行该任务。pnpm db:migrate 会应用与服务启动时相同的 SQL。启动时会获取 advisory lock,必要时创建 schema_migrations,并应用尚未记录的版本。如果未设置 DATABASE_URL,或数据库在几秒内没有响应,则会关闭跟踪功能,网站仍会继续提供工具服务。

如果不运行汇总任务,执行的清理操作相同:

DELETE FROM tool_runs WHERE ts < now() - interval '90 days';
DELETE FROM page_views WHERE ts < now() - interval '90 days';
DELETE FROM tool_opens WHERE ts < now() - interval '90 days';
DELETE FROM search_queries WHERE ts < now() - interval '90 days';
DELETE FROM ui_actions WHERE ts < now() - interval '90 days';

MCP 调用与页面处理不同。服务会运行该函数。以 base64 发送的文件,或由服务获取的公开 URL,仅会在本次调用期间读入内存,不会写入磁盘。MCP 条目注明会获取网络内容的工具,会在注册表中标记为 openWorld。图片和 PDF 页面仍由浏览器处理;其 MCP 处理器接受文件,因为 Agent 在此服务上没有本地磁盘。

技术栈

Next.js 16(App Router、React Server Components、output: "standalone")、React 19、严格模式下的 TypeScript、Tailwind CSS v4、基于 Base UI 的 shadcn/ui(base-nova)、zod 4、vitest,以及 Model Context Protocol TypeScript SDK。pnpm 10.33.4。CI 和 Docker 镜像使用 Node 22。字体为 Geist Sans 和 Geist Mono。主题使用 next-themes(<html> 上的 class)。

项目结构

src/app/                  directory, category, tag, tool, explore, search, about, AI, MCP guide
src/app/mcp/route.ts      POST /mcp
src/app/api/v1/tools/     POST /api/v1/tools/<slug>
src/app/api/v1/stats/     GET /api/v1/stats
src/app/api/track/        POST /api/track
src/app/api/tools/        browser routes for tools that fetch
src/lib/analytics/        usage counts, queue, migrations, country lookup
src/tools/<slug>/         meta.ts, tool.tsx, lib/, mcp.ts
src/registry/             generated index, loaders, MCP registry, search index
src/lib/                  shared helpers, MCP handler, SSRF guard, rate limit
src/components/kit/       tool workspace blocks
src/components/ui/        themed primitives
src/components/shell/     directory
public/tools/<slug>/      cover.png and logo.png
scripts/gen-registry.ts
scripts/db-migrate.ts
scripts/db-retain.ts
scripts/download-geodb.ts
scripts/gen-readme-tools.ts
scripts/gen-mcp-docs.ts
scripts/live-mcp-smoke.mts

pnpm gen:registry 会扫描 src/tools/*/meta.ts 和 mcp.ts,检查它们并生成注册表。目录仅导入元数据。工具 UI 由生成的宿主通过 next/dynamic 加载,因此打开目录时不会下载所有工具。

更多详情请参阅 docs/ARCHITECTURE.md。

本地开发

Node 22(参见 .nvmrc)和 pnpm 10.33.4(package.json 中的 packageManager;Corepack 会使用该版本)。

pnpm install
pnpm dev

pnpm dev 会在端口 3000 上启动 Next。

pnpm test
pnpm lint
pnpm typecheck
pnpm build
pnpm start

pnpm build 会先运行 pnpm gen:registry。测试使用 vitest,文件为 src/**/*.test.ts。

更改注册表后:

pnpm gen:readme-tools
pnpm gen:mcp-docs
Docker

Dockerfile 中的镜像采用三阶段构建:安装依赖、运行 pnpm geo:download 和 pnpm build,然后使用 Node 22 Alpine 运行器在端口 3000 上启动 node server.js。国家数据库下载失败也不会影响构建;在文件存在之前,国家信息会保持为空。运行器会将 data/ 复制到服务器旁边。

docker build -t benchline .
docker run --rm -p 3000:3000 benchline

运行器会将 pdfjs-dist、zxing-wasm、tesseract.js、tesseract.js-core 及其 worker 依赖、satori 和 @resvg/resvg-js 复制到独立服务器旁边,以便 PDF、条码、OCR 和 Open Graph 工具加载这些依赖。

环境
变量用途默认值
NEXT_PUBLIC_SITE_URL规范 URL、Open Graph 和 MCP 来源检查https://benchline.fabwaseem.com
MCP_URL仅供 scripts/live-mcp-smoke.mts 使用https://benchline.fabwaseem.com/mcp
DATABASE_URL用于匿名使用次数统计的 Postgres 17 连接未设置(关闭追踪)
ANALYTICS_SALT每日 IP 哈希未设置(不生成哈希)
STATS_TOKENGET /api/v1/stats 的 Bearer token未设置(该路由返回 404)
ADMIN_PASSWORD/admin 的密码未设置(/admin 返回 404)
ADMIN_SESSION_SECRET管理员会话 cookie 的 HMAC 密钥未设置(/admin 返回 404)
ADMIN_QUERY_TIMEOUT_MS管理员 SQL statement_timeout8000
ANALYTICS_RETENTION_DAYS汇总前原始事件的保留时长90
GEOIP_DB_PATHDB-IP country lite mmdbdata/dbip-country-lite.mmdb
GEOIP_DOWNLOAD0 表示跳过启动时下载文件缺失时下载

如果需要本地来源,请复制 .env.example。即使未设置这些变量,应用也能运行。

MCP 实时冒烟测试

scripts/live-mcp-smoke.mts 会使用 MCP 客户端连接,调用 tools/list,然后对列出的每个工具调用 tools/call。示例位于该文件中。脚本会在每次调用之间等待 1.2 秒,使完整测试保持在每分钟 60 次的限制以内,并会在遇到 429 时重试。结果写入 /tmp/benchline-mcp-live-results.json。如果调用失败或列出的工具没有示例,进程会以 1 退出。

MCP_URL=https://benchline.fabwaseem.com/mcp pnpm exec tsx scripts/live-mcp-smoke.mts

添加工具

创建 src/tools/<slug>/,其中包含 meta.ts、tool.tsx、纯函数 lib/ 及其 vitest 文件,还有 mcp.ts。将 slug 添加到 toolOrder,添加美术资源,将调用示例添加到端点测试和 scripts/live-mcp-smoke.mts,然后运行 pnpm gen:registry。具体步骤、UI 规则和 MCP 契约见 CONTRIBUTING.md。

路线图

新工具和更改通过 GitHub issue 进行跟踪。工具构想应使用工具请求模板,说明其功能、证明人们需要它的依据、MCP 调用,以及它能否在浏览器中按照许可政策运行。本仓库不会另行维护未发布的功能列表。

许可证

MIT。版权所有 (c) 2026 Waseem Anjum。

致谢

Benchline 基于 Next.js、React、Tailwind CSS、shadcn/ui 和 Base UI、zod、Vitest、Model Context Protocol TypeScript SDK、Lucide 和 Geist(通过 next/font 加载)构建。工具实现使用 package.json 中列出的软件包,包括 pdf-lib 和 sharp。新增依赖均采用宽松许可证。请参阅 CONTRIBUTING.md。

IP 地理位置数据由 DB-IP 提供,使用免费的 IP to Country Lite 数据库,遵循 CC BY 4.0 许可。构建时会下载图片 dbip-country-lite-YYYY-MM.mmdb.gz。如果文件缺失,国家/地区字段将为空。

评论

支持 Markdown

第一次接触 MCP?

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

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