Sys8 MCP Server
MCP server for system information and developer utilities
Version: 0.4.0 | License: MIT
Sys8是一个全面的模型上下文协议(MCP)服务器,提供系统信息和开发人员实用程序:日期/时间、操作系统版本、数学计算、随机数据生成(UUID、十六进制、base64)、哈希、文本格式、数据验证(包括JSON)、编码/解码等。
特性
系统信息
- 获取当前日期时间:获取所有可用格式的当前日期和时间(UTC、日期字符串、时间字符串、日期时间字符串、Unix时间戳、人类可读格式)
- 获取操作系统版本:检索操作系统版本、平台信息和当前用户信息
计算和安全
- 计算数学表达式:安全地计算数学表达式
- 生成随机:生成随机数据(UUID v4、十六进制字符串、base64字符串或原始字节)
- 哈希字符串:为字符串生成哈希值(对.env文件键有用)
开发工具(v0.4.0中的新功能)
- 编码/解码Base64:将字符串与Base64格式进行编码和解码
- 编码/解码URL:查询字符串和路径的URL编码和解码
- 设置文本大小写格式:将文本转换为不同的大小写格式(camelCase、PascalCase、烤肉串大小写、snake_case、CONSTANT_case、标题大小写、小写、大写)
- 生成蛞蝓:从文本生成URL友好的slug
- 验证数据:根据各种格式(电子邮件、url、ipv4、ipv6、域、电话、信用卡、uuid、十六进制、base64、json)验证数据
- 格式化JSON:格式化、验证、缩小或美化JSON字符串
- 生成密码:生成具有可自定义选项(长度、字符类型、排除类似选项)的安全密码
- 格式化字节:将字节格式化为人类可读格式(二进制或十进制)
- 格式编号:格式化数字(货币、百分比、千位分隔符、小数)
- 转换颜色:在颜色格式(十六进制、RGB、HSL)之间转换
- 转换时区:在时区之间转换日期时间
- 分析日志:分析日志中的错误和警告文本(编译、npm、Docker、运行时等)
- 分析语言:分析文本的语言分布和字符类型(英语、中文、俄语、乌克兰语、越南语、日语、土耳其语、西班牙语、数字、标点符号、符号)
为什么选择MCP?项目理念
为什么使用MCP而不是LLM代理?
此MCP服务器提供确定性、可靠的系统实用程序 从不 被委托给人工智能代理。原因如下:
🎯 准确性和可靠性
- AI代理会犯错:LLM在处理数学运算、日期/时间转换或数据验证时经常出现幻觉、计算错误并产生不一致的结果
- 确定性算法:这些函数使用经过验证和测试的算法,这些算法总是能产生正确的结果
- 确切性:系统信息、计算和验证需要AI无法保证的精度
💰 成本效益
- 代币节省:与其将复杂的计算或验证逻辑发送到昂贵的LLM API,不如通过MCP在本地执行它们
- 减少了API调用:一个MCP工具调用可以替换多个LLM推理步骤
- 更快的响应:直接函数执行比LLM处理快几个数量级
🔒 安全与隐私
- 本地执行:敏感操作(哈希、密码生成)在本地运行,而不是在云LLM服务中运行
- 无数据泄露:系统信息、计算和验证保留在您的计算机上
- 可审计代码:您可以查看并验证所使用的确切算法
⚡ 演出
- 即时结果:数学计算、日期/时间操作和验证以毫秒为单位执行
- 无网络延迟:所有操作在没有API round-trips的情况下本地运行
- 可扩展的:每秒处理数千次操作,没有速率限制
✅ 最佳实践
- 关注点分离让人工智能处理推理和创造力;让算法处理计算和验证
- 适合工作的工具:对确定性任务使用确定性函数
- 可靠性:关键操作(UUID生成、密码哈希、数据验证)必须100%可靠
示例:不要问LLM“UTC的当前时间是多少?”,使用 get_current_datetime -它更快、更便宜,而且总是准确的。
先决条件
系统要求
用于本地安装
- Node.js>=24.0.0 (必填)
- 用于:所有服务器功能、UUID生成(通过 crypto 模块),日期/时间操作
- npm 或兼容的包管理器(必需)
- 用于:安装依赖项和构建项目
- OpenSSL (需要
generate_random具有十六进制/base64/字节类型)
- 通常预装在macOS和Linux上 - Windows:通过安装 Windows版OpenSSL 或使用WSL - 用于:加密安全随机字符串生成 - 备注:通过生成UUID generate_random 随着 type: 'uuid' 不需要openssl(使用Node.js crypto.randomUUID())
用于Docker安装
- 码头工人 (必填)
- Dockerfile会自动在容器中安装openssl - 基础图像: node:lts (包括Node.js和npm) - 生产图片: node:lts-slim 安装了openssl
NPM依赖关系
以下软件包通过以下方式自动安装 npm install:
- @模型上下文协议/sdk (v0.6.0)
- 需要:MCP协议实现、服务器/客户端通信
- expr评估 (v2.0.2)
- 必需:安全的数学表达式计算 calculate_math_expression - 提供:安全的表达式解析,无需 eval() 危险分子
使用的系统库
- Node.js内置模块 (无需安装):
- crypto -UUID生成、哈希(hash_string) - os -操作系统信息(get_os_version) - util -异步操作的Promise实用程序 - child_process -执行openssl命令 - Buffer -Base64编码/解码,二进制操作
- 系统命令:
- openssl -随机字符串生成(十六进制、base64、字节) - 命令: openssl rand --hex - 命令: openssl rand | openssl base64
安装
本地安装
- 导航到sys8目录:
cd sys8- 安装依赖项:
npm install- 构建服务器:
npm run build快速入门:MCP配置
克隆并构建存储库后,在MCP客户端中配置sys8。
选项1:本地安装(推荐)
macOS/Linux示例:
{
"command": "node",
"args": ["/home/user/mcp-sys8/build/index.js"]
}Windows示例:
{
"command": "node",
"args": ["C:\\Users\\user\\mcp-sys8\\build\\index.js"]
}选项2:相对路径(项目特定配置)
如果sys8位于您的项目中:
{
"command": "node",
"args": ["./sys8/build/index.js"]
}完整配置示例
有关所有MCP客户端(Cursor AI、Claude Desktop、Windsurf、Docker)的详细安装和配置说明,请参阅 完整安装指南.
Docker安装
sys8 MCP服务器是容器化的,可以使用Docker运行。
Docker依赖关系 (自动安装在容器中):
- Node.js LTS(来自
node:lts基础图像) - openssl(通过安装
apt-get install openssl生产阶段) - 来自的所有npm依赖项
package.json
构建Docker镜像
cd sys8
docker build -t sys8:latest .运行容器
sys8 MCP服务器使用stdio协议进行通信,因此它应该以交互方式运行:
docker run --rm -i sys8:latest与Docker桌面MCP工具包一起使用
sys8服务器设计用于Docker桌面MCP工具包。构建镜像后,您可以在Docker Desktop的MCP设置中对其进行配置。
备注:对于Docker Registry中的生产使用,服务器将在发布后通过Docker Desktop MCP Toolkit提供。
查看Docker日志
MCP服务器将详细日志输出到 stderr (标准错误),它允许您监视Docker中的所有MCP操作。以下是查看它们的方法:
选项1:运行容器并直接查看日志
# Run container and see all logs immediately
docker run --rm sys8:latest node test-server.mjs
# This will show:
# - Server startup logs
# - All MCP tool calls
# - Success/failure status for each call选项2:以分离模式运行容器(用于生产)
# IMPORTANT: Run container with default CMD (MCP server will start automatically)
docker run -d --name sys8-server sys8:latest
# View logs (server startup and all MCP operations)
docker logs sys8-server
# View logs in real-time (follow mode)
docker logs -f sys8-server
# View last 50 lines
docker logs --tail 50 sys8-server
# View logs with timestamps
docker logs -f -t sys8-server
# Stop and remove container
docker rm -f sys8-server⚠️ 常见问题:空日志
如果 docker logs sys8-server 没有显示任何内容,这意味着容器是用不同的命令启动的(如 sleep infinity)而不是运行MCP服务器。
解决方案:
# Stop and remove the container
docker stop sys8-server
docker rm sys8-server
# Start with correct command (MCP server will run automatically)
docker run -d --name sys8-server sys8:latest
# Now logs will be visible
docker logs -f sys8-server要检查服务器是否正在运行,请执行以下操作:
# Check container status
docker ps | grep sys8-server
# Check if MCP server process is running (should show node process)
docker exec sys8-server sh -c "pgrep -f 'node.*build/index.js' || echo 'Server not running - container may be using sleep command'"选项2:运行容器并立即查看日志
# Run container and see all output (including logs)
docker run --rm sys8:latest node test-server.mjs选项3:测试MCP方法并查看日志
# Build image
docker build -t sys8-server:latest .
# Run tests inside container (logs will be visible)
docker run --rm sys8-server:latest node test-server.mjs日志格式: 所有日志都以时间戳和日志级别作为前缀:
[2025-12-07T04:33:44.379Z] [INFO] ========================================
[2025-12-07T04:33:44.379Z] [INFO] Sys8 MCP Server started
[2025-12-07T04:33:44.379Z] [INFO] Version: 0.4.0
[2025-12-07T04:33:44.379Z] [INFO] Transport: stdio
[2025-12-07T04:33:44.379Z] [INFO] ========================================
[2025-12-07T04:33:44.383Z] [INFO] Tool call received: get_current_datetime
[2025-12-07T04:33:44.391Z] [INFO] Tool call: get_current_datetime | Args: {} | Status: SUCCESS
[2025-12-07T04:33:44.392Z] [INFO] Tool call received: get_os_version
[2025-12-07T04:33:44.392Z] [INFO] Tool call: get_os_version | Args: {} | Status: SUCCESS记录的内容:
- 服务器启动信息(版本、传输)
- ListTools请求(当客户端请求可用工具时)
- 所有工具调用(名称、参数、成功/失败状态)
- 错误(带有详细的错误消息)
注: 当通过MCP客户端(如Cursor AI)使用服务器时,日志会自动显示在客户端的输出中。对于以分离模式运行的Docker容器,请使用 docker logs 查看它们。
用法
可用工具
1. get_current_datetime
获取所有可用格式的当前日期和时间。
参数: 无
例子:
{
"name": "get_current_datetime",
"arguments": {}
}答复:
{
"utc": "2025-11-30T10:27:35.291Z",
"date": "2025-11-30",
"time": "10:27:35",
"datetime": "2025-11-30 10:27:35",
"unix_timestamp_seconds": 1764498455,
"unix_timestamp_milliseconds": 1764498455291,
"human_readable_utc0": "30/11/2025, 10:27:35",
"human_readable_utc2": "30/11/2025, 12:27:35",
"human_readable_utc3": "30/11/2025, 13:27:35"
}响应字段:
utc:ISO 8601 UTC日期时间字符串date:YYYY-MM-DD格式的日期字符串time:HH:mm:ss格式的时间字符串datetime:组合日期和时间字符串unix_timestamp_seconds:Unix时间戳(秒)unix_timestamp_milliseconds:Unix时间戳(毫秒)human_readable_utc0:UTC+0的人类可读格式(DD/MM/YYYY,HH:MM:SS)human_readable_utc2:UTC+2的人类可读格式(DD/MM/YYYY,HH:MM:SS)human_readable_utc3:UTC+3的人类可读格式(DD/MM/YYYY,HH:MM:SS)
2. get_os_version
获取操作系统版本、平台信息和当前用户信息。
参数: 无
例子:
{
"name": "get_os_version",
"arguments": {}
}答复:
{
"platform": "darwin",
"release": "25.1.0",
"architecture": "arm64",
"type": "Darwin",
"hostname": "mac.local",
"username": "ug",
"homedir": "/Users/ug",
"platformName": "macOS",
"uid": 501,
"gid": 20
}响应字段:
platform:平台标识符(达尔文、win32、linux)release:操作系统发布版本architecture:CPU架构type:操作系统类型hostname:系统主机名username:当前用户名homedir:用户主目录platformName:人类可读的平台名称(macOS、Windows、Linux)uid:用户ID(仅限Unix系统)gid:组ID(仅限Unix系统)
3. calculate_math_expression
安全地计算一个数学表达式。
参数:
expression(必填,字符串):要计算的数学表达式(例如,“2+2”,“(10+5)\*3/2”,“sqrt(16)”)
支持的操作:
- 算术:
+,-,*,/,%(模),^(电源) - 函数:
abs,ceil,floor,round,max,min,sqrt,sin,cos,tan,asin,acos,atan,log,exp - 常量:
PI,E - 括号:完全支持对表达式进行分组
- 优先:标准数学运算符优先级
例子:
{
"name": "calculate_math_expression",
"arguments": {
"expression": "2 + 2"
}
}答复:
{
"result": 4,
"expression": "2 + 2"
}更多示例:
- 简单算术:
"2 + 2"→4 - 复杂表达式:
"(10 + 5) * 3 / 2"→22.5 - 十进制运算:
"3.14 * 2"→6.28 - 负数:
"-5 + 3"→-2 - 功能:
"sqrt(16)"→4,"sin(PI/2)"→1 - 功率:
"2^3"→8
错误处理:
- 语法无效:返回错误并显示明确消息
- 除零:返回错误“不允许除零”
- 空表达式:返回错误“表达式不能为空或仅为空白”
- 无效操作:返回描述错误
4. generate_random
生成随机数据:UUID v4、十六进制字符串、base64字符串或原始字节。
参数:
type(字符串,必填):随机数据类型-'uuid'|'hex'|'base64'|'bytes'length(数字,可选):十六进制/base64/字节的长度(8-128,默认值:生成所有标准长度)format(字符串,可选):仅适用于UUID的格式-'standard'|'uppercase'|'without-dashes'(默认:返回所有格式)
示例(UUID):
{
"name": "generate_random",
"arguments": {
"type": "uuid"
}
}响应(UUID):
{
"type": "uuid",
"value": "550e8400-e29b-41d4-a716-446655440000",
"uuid": {
"standard": "550e8400-e29b-41d4-a716-446655440000",
"uppercase": "550E8400-E29B-41D4-A716-446655440000",
"without_dashes": "550e8400e29b41d4a716446655440000"
}
}示例(十六进制-所有长度):
{
"name": "generate_random",
"arguments": {
"type": "hex"
}
}响应(十六进制-所有长度):
{
"type": "hex",
"value": "84A7B45B6BD20D97",
"hex": {
"hex_8_uppercase": "84A7B45B6BD20D97",
"hex_16_uppercase": "4F76E8D72DFC73D01697F31B65910C19",
"hex_32_uppercase": "57FCAA273E858F6CA7A467A8E233727F913C799E8B51E8B27EF04B90BBD4C2F4",
"hex_64_uppercase": "5F2DCD116CEF205127445A5134D8008E3556CBDCC4759E89DA540C043E3B68B34A20A55587D375069BC38A97404E12C3FCEB42C8BB09E4C7651059107B2B9EFD"
}
}示例(Base64-特定长度):
{
"name": "generate_random",
"arguments": {
"type": "base64",
"length": 32
}
}响应(Base64-特定长度):
{
"type": "base64",
"value": "Yf1uDqalYr67AEtjTR/LxWj2zza/b7iUyHGNRpXPUAA=",
"base64": {
"base64_32": "Yf1uDqalYr67AEtjTR/LxWj2zza/b7iUyHGNRpXPUAA="
}
}注:
- UUID生成使用Node.js加密,不需要openssl
- 十六进制、base64和字节生成需要安装openssl
- 如果openssl不可用,hex/base64/bytes生成将返回错误
5. hash_string
为字符串生成哈希值(对.env文件密钥很有用)。
参数:
input(必填,string):字符串哈希
例子:
{
"name": "hash_string",
"arguments": {
"input": "my-secret-key"
}
}答复:
{
"input": "my-secret-key",
"sha256_hex": "d5579c46dfcc7f18207013e65b44e4cb4e2c2298f4ac457ba8f82743f31e930b",
"sha256_base64": "1VecRt/MfxggcBPmW0Tky04sIpj0rEV7qPgnQ/Mekws=",
"sha512_hex": "10e6d647af44624442f388c2c14a787ff8b17e6165b83d767ec047768d8cbcb71a1a3226e7cc7816bc79c0427d94a9da688c41a3992c7bf5e4d7cc3e0be5dbac",
"sha512_base64": "EObWR69EYkRC84jCwUp4f/ixfmFluD12fsBHdo2MvLcaGjIm58x4Frx5wEJ9lKnaaIxBo5kse/Xk18w+C+XbrA=="
}响应字段:
input:原始输入字符串sha256_hex:十六进制格式的SHA256哈希(64个字符)sha256_base64:base64格式的SHA256哈希sha512_hex:十六进制格式的SHA512哈希(128个字符)sha512_base64:base64格式的SHA512哈希
错误处理:
- 空输入:返回错误“输入字符串不能为空或仅为空白”
6. analyze_logs
分析日志中的错误和警告文本。检测常见的错误模式,包括编译错误、npm错误、Docker错误、运行时错误和警告。
参数:
text(必填,字符串):用于分析错误和警告的文本内容
例子:
{
"name": "analyze_logs",
"arguments": {
"text": "npm ERR! code EACCES\nnpm ERR! permission denied\nerror TS2304: Cannot find name 'undefined'.\nnpm WARN deprecated package@1.0.0"
}
}答复:
{
"error_count": 3,
"warning_count": 1,
"errors": [
{
"line": 1,
"message": "npm ERR! code EACCES",
"type": "npm"
},
{
"line": 2,
"message": "npm ERR! permission denied",
"type": "npm"
},
{
"line": 3,
"message": "error TS2304: Cannot find name 'undefined'.",
"type": "compilation"
}
],
"warnings": [
{
"line": 4,
"message": "npm WARN deprecated package@1.0.0",
"type": "npm"
}
]
}响应字段:
error_count:文本中发现的错误数warning_count:文本中发现的警告数errors:错误对象数组,包含:
- line:发现错误的行号 - message:错误消息(截断为200个字符) - type:错误类型(编译、npm、docker、运行时等)
warnings:警告对象数组,包括:
- line:发现警告的行号 - message:警告消息(截断为200个字符) - type:警告类型(npm、弃用、安全等)
检测到的错误类型:
- 编译错误(TypeScript、语法、类型错误)
- npm错误(EACCES、ENOENT、安装失败)
- Docker错误(构建失败、找不到映像、容器错误)
- 运行时错误(异常、致命错误、堆栈溢出)
- 网络错误(连接被拒绝、超时、HTTP错误)
- 文件系统错误(ENOENT、EACCES、权限被拒绝)
- 数据库错误(SQL错误、连接失败)
- 身份验证错误(未经授权、无效令牌)
检测到的警告类型:
- npm警告(已弃用的包、对等依赖)
- 编译警告(未使用的变量、类型安全)
- Docker警告
- 安全警告(漏洞、不安全配置)
- 性能警告(查询速度慢、内存泄漏)
- 不推荐使用的API警告
错误处理:
- 空文本:返回零计数和空数组
7. analyze_language
分析文本的语言分布和字符类型。检测多种语言(英语、中文、俄语、乌克兰语、越南语、日语、土耳其语、西班牙语)的字符,并对其他字符(数字、标点符号、符号、空格)进行分类。
参数:
text(必填,字符串):用于分析语言和字符分布的文本内容
例子:
{
"name": "analyze_language",
"arguments": {
"text": "Hello 你好 Привет こんにちは 123!"
}
}答复:
{
"total_characters": 20,
"encoding": "UTF-16 (JavaScript default)",
"languages": {
"english": {
"count": 5,
"percentage": 25.0
},
"chinese": {
"count": 2,
"percentage": 10.0
},
"russian": {
"count": 6,
"percentage": 30.0
},
"ukrainian": {
"count": 0,
"percentage": 0.0
},
"vietnamese": {
"count": 0,
"percentage": 0.0
},
"japanese": {
"count": 5,
"percentage": 25.0
},
"turkish": {
"count": 0,
"percentage": 0.0
},
"spanish": {
"count": 0,
"percentage": 0.0
}
},
"categories": {
"digits": {
"count": 3,
"percentage": 15.0
},
"punctuation": {
"count": 1,
"percentage": 5.0
},
"symbols": {
"count": 0,
"percentage": 0.0
},
"whitespace": {
"count": 3,
"percentage": 15.0
},
"other": {
"count": 0,
"percentage": 0.0
}
}
}响应字段:
total_characters:文本中的字符总数encoding:如果可以确定,则检测到编码(UTF-8、UTF-16等)languages:具有特定语言计数和百分比的对象:
- english:英文字母(A-Z,A-Z) - chinese:汉字(CJK统一表意文字) - russian:俄语西里尔字母 - ukrainian:乌克兰西里尔字母(由i、o、є等特定字符区分) - vietnamese:带变音符号的越南语拉丁字符 - japanese:日文字符(平假名、片假名、汉字) - turkish:具有特定字符的土耳其语拉丁字符(İ、ı、Ş、ş、286、ğ、Ç、ç、Ö、ö、Ü、ü) - spanish:具有特定字符(a、e、i、o、u、ñ、ü)的西班牙语拉丁字符
categories:具有字符类别计数和百分比的对象:
- digits:数字(0-9) - punctuation:标点符号 - symbols:数学符号和其他符号 - whitespace:空格字符(空格、制表符、换行符) - other:未分类字符
语言检测:
- 使用Unicode范围来识别不同语言的字符
- 通过检测乌克兰特定字符(i,o,є)来区分俄语和乌克兰语
- 检测越南语、土耳其语和西班牙语的特定语言字符
- 百分比的计算精度为小数点后2位
编码检测:
- 尝试检测编码(UTF-8、UTF-16、UTF-8 BOM等)
- 使用基于BOM标记和字符模式的启发式方法
- 如果可确定,则返回编码信息,否则可能未定义
错误处理:
- 空文本:返回所有语言和类别的零计数和百分比
8. encode_base64
将字符串编码为Base64格式。
参数:
input(必填,string):要编码的字符串encoding(可选,字符串):输入编码-utf8,hex,或binary(默认值:utf8)
例子:
{
"name": "encode_base64",
"arguments": {
"input": "Hello World!",
"encoding": "utf8"
}
}答复:
{
"encoded": "SGVsbG8gV29ybGQh",
"input": "Hello World!",
"encoding": "utf8"
}9. decode_base64
解码Base64字符串。
参数:
input(必填,字符串):要解码的Base64字符串encoding(可选,字符串):输出编码-utf8,hex,或binary(默认值:utf8)
例子:
{
"name": "decode_base64",
"arguments": {
"input": "SGVsbG8gV29ybGQh",
"encoding": "utf8"
}
}答复:
{
"decoded": "Hello World!",
"input": "SGVsbG8gV29ybGQh",
"encoding": "utf8"
}10. encode_url
对URL的字符串进行编码(URL编码)。
参数:
input(必填,string):要编码的字符串component(可选,字符串):组件类型-full,path,或query(默认值:full)
例子:
{
"name": "encode_url",
"arguments": {
"input": "Hello World!",
"component": "full"
}
}答复:
{
"encoded": "Hello%20World%21",
"input": "Hello World!",
"component": "full"
}11. decode_url
解码URL编码字符串。
参数:
input(必填,字符串):要解码的URL编码字符串component(可选,字符串):组件类型-full,path,或query(默认值:full)
例子:
{
"name": "decode_url",
"arguments": {
"input": "Hello%20World%21",
"component": "full"
}
}答复:
{
"decoded": "Hello World!",
"input": "Hello%20World%21",
"component": "full"
}12. format_text_case
将文本转换为不同的大小写格式。
参数:
input(必填,字符串):要转换的文本format(可选,字符串):目标格式-camelCase,PascalCase,kebab-case,snake_case,CONSTANT_CASE,Title Case,lowercase,或UPPERCASE(如果省略,则返回所有格式)
例子:
{
"name": "format_text_case",
"arguments": {
"input": "hello world example"
}
}答复:
{
"input": "hello world example",
"camelCase": "helloWorldExample",
"PascalCase": "HelloWorldExample",
"kebab-case": "hello-world-example",
"snake_case": "hello_world_example",
"CONSTANT_CASE": "HELLO_WORLD_EXAMPLE",
"Title Case": "Hello World Example",
"lowercase": "hello world example",
"UPPERCASE": "HELLO WORLD EXAMPLE"
}13. generate_slug
从文本生成URL友好的slug。
参数:
input(必填,字符串):要转换为slug的文本separator(可选,字符串):分隔符(默认值:-)lowercase(可选,布尔值):转换为小写(默认值:true)
例子:
{
"name": "generate_slug",
"arguments": {
"input": "Hello World Example!",
"separator": "-",
"lowercase": true
}
}答复:
{
"input": "Hello World Example!",
"slug": "hello-world-example",
"separator": "-"
}14. validate_data
根据各种格式验证数据。
参数:
input(必填,字符串):要验证的数据type(必填,字符串):验证类型-email,url,ipv4,ipv6,domain,phone,credit-card,uuid,hex,base64,或json
例子:
{
"name": "validate_data",
"arguments": {
"input": "user@example.com",
"type": "email"
}
}答复:
{
"input": "user@example.com",
"type": "email",
"valid": true,
"normalized": "user@example.com"
}支持的验证类型:
email:电子邮件地址验证url:URL验证(必须以http://或https://开头)ipv4:IPv4地址验证ipv6:IPv6地址验证domain:域名验证phone:电话号码验证(国际格式)credit-card:信用卡号验证(13-19位数字)uuid:UUID v4验证hex:十六进制字符串验证base64:Base64字符串验证json:JSON字符串验证(解析)
15. format_json
格式化、验证、缩小或美化JSON。
参数:
input(必填,string):要处理的JSON字符串action(必填,字符串):要执行的操作-format,validate,minify,或prettifyindent(可选,数字):缩进的空格数(0-10,默认值:2)
例子:
{
"name": "format_json",
"arguments": {
"input": "{\"name\":\"test\",\"value\":123}",
"action": "prettify",
"indent": 2
}
}答复:
{
"valid": true,
"formatted": "{\n \"name\": \"test\",\n \"value\": 123\n}",
"minified": "{\"name\":\"test\",\"value\":123}"
}行动:
validate:验证JSON并返回格式化版本format:使用指定缩进格式化JSONprettify:与格式相同(打印精美)minify:从JSON中删除所有空格
16. generate_password
使用可定制的选项生成安全密码。
参数:
length(可选,数字):密码长度(8-128,默认值:16)include_uppercase(可选,布尔值):包含大写字母(默认值:true)include_lowercase(可选,布尔值):包含小写字母(默认值:true)include_numbers(可选,布尔值):包括数字(默认值:true)include_symbols(可选,布尔值):包含符号(默认值:true)exclude_similar(可选,布尔值):排除类似字符(il1Lo0O)(默认值:false)
例子:
{
"name": "generate_password",
"arguments": {
"length": 16,
"include_uppercase": true,
"include_lowercase": true,
"include_numbers": true,
"include_symbols": true,
"exclude_similar": false
}
}答复:
{
"password": "Kx9#mP2$vL8@nQ4!",
"length": 16,
"strength": "strong",
"entropy": 95.24,
"character_set_size": 94
}密码强度级别:
weak:低熵(\90)
17. format_bytes
将字节格式化为人类可读的格式。
参数:
bytes(必填,数字):要格式化的字节数format(可选,字符串):格式类型-binary(基于1024)或decimal(基于1000)(默认值:binary)precision(可选,数字):小数位数(0-10,默认值:2)
例子:
{
"name": "format_bytes",
"arguments": {
"bytes": 1048576,
"format": "binary",
"precision": 2
}
}答复:
{
"bytes": 1048576,
"formatted": "1.00 MB",
"formatted_decimal": "1.05 MB",
"kilobytes": 1024,
"megabytes": 1,
"gigabytes": 0.0009765625,
"terabytes": 9.5367431640625e-7,
"petabytes": 9.313225746154785e-10
}18. format_number
设置数字格式(货币、百分比、千位分隔符、小数)。
参数:
number(必填,数字):数字格式format(必填,字符串):格式类型-currency,percentage,thousands,或decimallocale(可选,字符串):区域设置(默认值:en-US)currency(可选,字符串):货币格式的货币代码(默认值:USD)minimum_fraction_digits(可选,数字):最小分数位数(0-20)maximum_fraction_digits(可选,数字):最大分数位数(0-20)
例子:
{
"name": "format_number",
"arguments": {
"number": 1234.56,
"format": "currency",
"locale": "en-US",
"currency": "USD"
}
}答复:
{
"input": 1234.56,
"formatted": "$1,234.56",
"format": "currency",
"locale": "en-US",
"currency": "USD"
}格式类型:
currency:货币格式(例如,1234.56美元)percentage:格式为百分比(例如12.34%)thousands:带千位分隔符的格式(例如1234.56)decimal:带小数点的格式(例如1234.56)
19. convert_color
在颜色格式(十六进制、RGB、HSL)之间转换。
参数:
input(必填,字符串):要转换的颜色值from(必填,字符串):源颜色格式-hex,rgb,或hslto(必填,字符串):目标颜色格式-hex,rgb,或hsl
例子:
{
"name": "convert_color",
"arguments": {
"input": "#FF5733",
"from": "hex",
"to": "rgb"
}
}答复:
{
"input": "#FF5733",
"from": "hex",
"to": "rgb",
"hex": "#FF5733",
"rgb": "rgb(255, 87, 51)",
"hsl": "hsl(9, 100%, 60%)",
"rgb_array": [255, 87, 51],
"hsl_array": [9, 100, 60]
}注: 为了方便起见,返回所有格式(十六进制、RGB、HSL),而不管请求的转换如何。
20. convert_timezone
在时区之间转换日期时间。
参数:
datetime(必填,字符串):要转换的日期时间字符串from_timezone(可选,字符串):源时区(默认:UTC)to_timezone(必填,字符串):目标时区format(可选,字符串):输出格式(可选)
例子:
{
"name": "convert_timezone",
"arguments": {
"datetime": "2025-12-07T12:00:00Z",
"from_timezone": "UTC",
"to_timezone": "America/New_York"
}
}答复:
{
"input_datetime": "2025-12-07T12:00:00Z",
"from_timezone": "UTC",
"to_timezone": "America/New_York",
"converted_datetime": "2025-12-07 07:00:00",
"iso_string": "2025-12-07T07:00:00-05:00",
"unix_timestamp": 1733580000,
"formatted": "2025-12-07 07:00:00"
}安装和配置
快速开始
请在下面选择您的环境以获取安装说明:
- 光标AI -推荐用于AI驱动的代码编辑
- 克劳德桌面 -适用于Anthropic的Claude Desktop应用程序
- 帆板运动 -适用于Windsurf IDE
- 独立/CLI -作为独立服务器或CLI工具运行
______________________________________________________________________
光标AI
全局配置(所有用户和项目)-推荐
要将此MCP服务器配置为全局用于Cursor AI(适用于所有用户和项目),您需要将其添加到全局MCP配置文件中。
选项1:使用tsx(建议用于开发)
这种方法与其他MCP服务器类似,直接运行TypeScript而无需编译。在开发过程中更方便。
macOS/Linux:
- 创建或编辑全局MCP配置文件:
mkdir -p ~/Library/Application\ Support/Cursor/User/globalStorage
nano ~/Library/Application\ Support/Cursor/User/globalStorage/mcp.json或者:
mkdir -p ~/.cursor
nano ~/.cursor/mcp.json- 添加以下配置:
{
"mcpServers": {
"sys8": {
"command": "npx",
"args": ["tsx", "/Users/ug/code/AI/mcp/sys8/src/index.ts"]
}
}
}窗户:
{
"mcpServers": {
"sys8": {
"command": "npx",
"args": ["tsx", "C:\\path\\to\\mcp\\sys8\\src\\index.ts"]
}
}
}重要提示: 将路径替换为您的绝对路径 src/index.ts 文件。
选项2:使用编译的JavaScript(生产环境)
这种方法使用编译的JavaScript文件。需要跑步 npm run build 代码更改后。
macOS/Linux:
- 创建或编辑全局MCP配置文件:
mkdir -p ~/Library/Application\ Support/Cursor/User/globalStorage
nano ~/Library/Application\ Support/Cursor/User/globalStorage/mcp.json- 添加以下配置:
{
"mcpServers": {
"sys8": {
"command": "node",
"args": ["/Users/ug/code/AI/mcp/sys8/build/index.js"]
}
}
}重要提示: 替换 /Users/ug/code/AI/mcp/sys8/build/index.js 与你的绝对路径 build/index.js 文件。
Linux
- 创建或编辑全局MCP配置文件:
mkdir -p ~/.config/Cursor/User/globalStorage
nano ~/.config/Cursor/User/globalStorage/mcp.json或者:
mkdir -p ~/.cursor
nano ~/.cursor/mcp.json- 为macOS添加如上所示的配置。
视窗
- 创建或编辑全局MCP配置文件:
%APPDATA%\Cursor\User\globalStorage\mcp.json或者:
%USERPROFILE%\.cursor\mcp.json- 添加以下配置(使用Windows路径格式):
{
"mcpServers": {
"sys8": {
"command": "node",
"args": ["C:\\path\\to\\mcp\\sys8\\build\\index.js"]
}
}
}注: 使用双反睫毛(\\)或正斜杠(/)在Windows路径中。
项目特定配置
如果您希望按项目配置它,请创建或编辑 .cursor/mcp.json 项目根目录中的文件:
{
"mcpServers": {
"sys8": {
"command": "node",
"args": ["/absolute/path/to/sys8/build/index.js"]
}
}
}例子: 如果你的项目在 /Users/ug/code/AI/mcp,您可以使用:
{
"mcpServers": {
"sys8": {
"command": "node",
"args": ["./sys8/build/index.js"]
}
}
}替代方案:使用npm链接(用于开发)
如果您想在任何地方使用服务器而不指定完整路径:
- 在sys8目录中:
npm link- 然后在配置中,使用:
{
"mcpServers": {
"sys8": {
"command": "sys8"
}
}
}验证配置
添加配置后:
- 重新启动游标AI
- MCP服务器应自动加载
- 您可以使用Cursor AI聊天中的工具验证它是否正常工作
配置文件示例
看 cursor-mcp-config-example.json 在此目录中查看完整的示例配置。
测试
自动化测试
运行自动化测试套件以验证所有功能:
npm test这将测试所有20个工具:
get_current_datetime-所有可用格式get_os_version-操作系统信息和用户详细信息calculate_math_expression-简单的算术、复杂的表达式、函数和错误情况hash_string-十六进制和base64格式的SHA256和SHA512哈希generate_random-UUID v4、十六进制字符串、base64字符串或原始字节生成encode_base64/decode_base64-Base64编码/解码encode_url/decode_url-URL编码/解码format_text_case-文本大小写转换(camelCase、kebab case等)generate_slug-URL友好的slug生成validate_data–数据验证(电子邮件、URL、IP、JSON等)format_json-JSON格式化、验证和压缩generate_password-使用可定制选项生成安全密码format_bytes-字节格式化为人类可读格式(二进制/十进制)format_number-数字格式(货币、百分比、千、小数)convert_color-颜色转换(十六进制、RGB、HSL)convert_timezone-时区转换analyze_logs-分析日志中的错误和警告文本analyze_language-分析文本的语言分布和字符类型analyze_language-分析文本的语言分布和字符类型
MCP检查员
使用MCP检查器交互式测试服务器:
npm run inspector这将打开一个交互式界面,您可以在其中手动测试每个工具。
手动测试
您也可以直接运行服务器:
node build/index.js或者使用tsx:
npx tsx src/index.ts发展
- 观看模式:
npm run watch-根据文件更改自动重建 - 构建:
npm run build-将TypeScript编译为JavaScript - 检查员:
npm run inspector-运行MCP检查器进行测试
限制和要求
系统相关性
- OpenSSL:必需
generate_random随着type: 'hex',type: 'base64',或type: 'bytes'
- 必须在系统PATH中安装并可访问 - 通常预装在macOS和Linux上 - Windows:单独安装或使用WSL - UUID生成 (generate_random 随着 type: 'uuid')不需要openssl(使用Node.js crypto.randomUUID())
- Node.js>=24.0.0:所有功能都需要
- 提供内置 crypto UUID和哈希模块 - 提供 os 系统信息模块 - 提供 Buffer 用于编码/解码操作
功能限制
- 操作系统版本信息:基于Node.js
os模块功能(可能因平台而异) - 日期/时间信息:
- get_current_datetime 返回UTC时区中的所有格式 - 使用系统时区设置进行转换
- 数学表达式:仅限于由以下机构支持的行动
expr-eval图书馆
- 支持:算术、三角学、对数、幂运算 - 不支持:复数、矩阵运算、符号数学 - 安全性:使用安全的解析器配置来防止代码注入(没有变量、逻辑运算符或比较运算符)
- 散列算法:只有SHA256和SHA512可用(通过
hash_string)
- 出于安全原因,未提供其他算法(MD5、SHA1等)
许可证
私人项目-不用于分发。
