TCP套接字MCP服务器

一个提供原始TCP套接字访问的模型上下文协议(MCP)服务器,使AI模型能够直接与网络服务交互,支持多并发连接、响应数据缓冲和自动触发响应。

  • by SpaceyKasey
  • Python
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 SpaceyKasey/TcpSocketMCP

使用说明

TCP套接字MCP服务器

一种模型上下文协议(MCP)服务器,提供原始TCP套接字访问,使AI模型能够使用原始TCP套接字直接与网络服务交互。 支持多个并发连接,缓冲响应数据并触发自动响应。

动机和背景

许多网络服务和物联网设备通过现有基于HTTP的MCP服务器未涵盖的原始TCP协议进行通信。TcpSocketMCP启用:

  • 与嵌入式设备和物联网系统的直接交互
  • 网络协议调试与测试
  • 没有HTTP包装器的遗留系统集成
  • 协议逆向工程与分析
  • 通过触发模式自动响应(适用于IRC、telnet、自定义协议)

这解决了几个社区成员所表达的对低级网络访问的需求,特别是对于工业自动化、物联网开发和网络安全测试场景。

演示

询问设备以弄清楚它是什么

向设备发送数据

TCP交互的示例输出

安装和设置

从PyPI安装

# Install with pip
pip install TcpSocketMCP

# Install with uv (recommended)
uv add TcpSocketMCP

# Add to Claude Code (recommended)
claude mcp add rawtcp -- uvx TcpSocketMCP

适用于克劳德桌面

将服务器添加到Claude Desktop配置文件中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json

选项1:使用已安装的软件包(推荐)

{
  "mcpServers": {
    "tcp-socket": {
      "command": "TcpSocketMCP",
      "env": {}
    }
  }
}

选项2:来源

{
  "mcpServers": {
    "tcp-socket": {
      "command": "python",
      "args": ["/path/to/tcp-socket-mcp/run.py"],
      "env": {}
    }
  }
}

开发设置

# Clone the repository
git clone https://github.com/kaseyk/tcp-socket-mcp.git
cd tcp-socket-mcp

# Install with uv (recommended)
uv pip install -e .

# Or install with pip
pip install -e .

# Run the server directly
python run.py

# Or use the command
TcpSocketMCP

可用工具

通过MCP配置后,AI模型可以使用以下工具:

核心连接工具

tcp_connect

打开与任何主机的TCP连接:端口

  • 返回a connection_id 用于后续操作
  • 支持预注册触发器的自定义connection_id
  • 例子: tcp_connect("example.com", 80)

tcp_send

通过已建立的连接发送数据

  • 编码选项: utf-8, hex (推荐二进制), base64
  • 十六进制格式:素色双,如 "48656C6C6F" 为“你好”
  • 终结者:可选十六进制后缀,如 "0D0A" 对于CRLF

tcp_read_buffer

从连接缓冲区读取接收到的数据

  • 发送后可能无法立即获得数据
  • 缓冲区存储所有接收到的数据,直到清除
  • 支持 index/count 部分阅读
  • 格式选项: utf-8, hex, base64

tcp断开连接

关闭连接并释放资源

  • 完成后始终关闭连接
  • 所有触发器自动删除

高级功能

tcp_set_trigger

设置模式匹配的自动响应

  • 预注册:在连接之前设置触发器以立即激活
  • 支持带有捕获组的正则表达式模式($1, $2)
  • 当模式匹配时,响应会自动触发
  • 非常适合协议握手(IRC PING/PONG等)

tcp_connect_and_send

在一个原子操作中组合连接和发送

  • 对时间敏感的协议至关重要
  • 可用于即时握手或抓取横幅
  • 返回connection_id以进行进一步操作

实用工具

  • tcp_list_connections:查看所有具有统计信息的活动连接
  • tcp_connection_info:获取有关特定连接的详细信息
  • tcp_baffer_info:在不读取数据的情况下检查缓冲区统计信息
  • tcp_clear_buffer:清除缓冲区中的接收数据
  • tcp_remove_trigger:删除特定的自动响应触发器

使用示例

基本TCP通信

# Connect to a service
conn_id = tcp_connect("example.com", 80)

# Send data (hex encoding recommended for protocols)
tcp_send(conn_id, "474554202F20485454502F312E310D0A", encoding="hex")  # GET / HTTP/1.1\r\n

# Read response (may need to wait for data)
response = tcp_read_buffer(conn_id)

# Clean up
tcp_disconnect(conn_id)

自动化协议处理

# Pre-register trigger for IRC PING/PONG
tcp_set_trigger("irc-conn", "ping-handler", "^PING :(.+)", "PONG :$1\r\n")

# Connect with pre-registered triggers
tcp_connect("irc.server.com", 6667, connection_id="irc-conn")
# PING responses now happen automatically!

使用二进制协议

# Use hex encoding for precise byte control
tcp_send(conn_id, "0001000400000001", encoding="hex")  # Binary protocol header

# Read response in hex for analysis
response = tcp_read_buffer(conn_id, format="hex")

重要提示

行结尾的十六进制编码

许多文本协议(HTTP、SMTP、IRC)都需要特定的行尾。使用十六进制编码来避免JSON转义问题:

# Common hex sequences:
# 0D0A     = \r\n (CRLF) - HTTP, SMTP, IRC
# 0A       = \n (LF) - Unix line ending
# 0D0A0D0A = \r\n\r\n - HTTP header terminator
# 00       = Null byte - Binary protocols

时间研究

  • 网络响应不是即时使用的 tcp_buffer_info 检查数据
  • 考虑实现延迟较小的重试逻辑
  • 缓冲区累积所有接收到的数据-需要时清除

🧪 测试与质量

TcpSocketMCP通过全面测试保持企业级质量:

测试覆盖率

  • 85%覆盖率 (超过80%的目标)
  • 80+综合测试 所有组件
  • 跨平台测试 (Ubuntu、Windows、macOS)
  • Python 3.10-3.12支持

质量门

  • 自动化CI/CD GitHub操作
  • 安全扫描 土匪与安全
  • 代码质量分析 Ruff和MyPy
  • 性能监控 复杂性分析

在本地运行测试

# Install with test dependencies
uv pip install -e .
uv pip install pytest pytest-asyncio pytest-cov

# Run full test suite with coverage
uv run pytest tests/ --cov=src/TcpSocketMCP --cov-report=term-missing

# Quick test run
uv run pytest

看 测试.md 获取全面的测试文档。

许可证

麻省理工学院