jerome3o
MCP Serverjerome3opublic

mcp transport scratch

一个基于WebSocket和HTTP的MCP传输层实现,包含服务器和客户端代码。

Repository Info

0
Stars
0
Forks
0
Watchers
0
Issues
Python
Language
-
License

About This Server

一个基于WebSocket和HTTP的MCP传输层实现,包含服务器和客户端代码。

Model Context Protocol (MCP) - This server can be integrated with AI applications to provide additional context and capabilities, enabling enhanced AI interactions and functionality.

Documentation

MCP Transport Scratch

This is a repo containing my tinkering with websocket and HTTP based MCP transport.

It contains a simple MCP server, that I wire up to websockets and http. Custom transport implementations are in transport.http and transport.ws.

I also have a test suite that makes some requests on the MCP server on each transport. To run the suite you need to run some stuff

Setup

uv sync
source ./.venv/bin/activate
export PYTHONPATH=src/

Server

uvicorn server.main:app

Client

python src/client/mcp_client.py

Example output

Starting in-memory client test
Client session started
Client initialized
Tool result: meta=None nextCursor=None tools=[Tool(name='echo_tool', description='Echoes the input', inputSchema={'properties': {'data': {'title': 'Data', 'type': 'string'}}, 'required': ['data'], 'title': 'echo_toolArguments', 'type': 'object'})]
Prompts result: meta=None nextCursor=None prompts=[Prompt(name='test_prompt', description='', arguments=[])]
Resources result: meta=None nextCursor=None resources=[Resource(uri=AnyUrl('test://test_resource'), name='test_resource', description='Test resource', mimeType='text/plain', size=None, annotations=None)]
Call tool result: meta=None content=[TextContent(type='text', text='Hello, world!', annotations=None)] isError=False
Call prompt result: meta=None description=None messages=[PromptMessage(role='user', content=TextContent(type='text', text='test prompt result', annotations=None))]
Read resource result: meta=None contents=[TextResourceContents(uri=AnyUrl('test://test_resource'), mimeType='text/plain', text='test resource data!')]
Memory test completed

Starting websocket client test
Connected to websocket
Client session started
Client initialized
Tool result: meta=None nextCursor=None tools=[Tool(name='echo_tool', description='Echoes the input', inputSchema={'properties': {'data': {'title': 'Data', 'type': 'string'}}, 'required': ['data'], 'title': 'echo_toolArguments', 'type': 'object'})]
Prompts result: meta=None nextCursor=None prompts=[Prompt(name='test_prompt', description='', arguments=[])]
Resources result: meta=None nextCursor=None resources=[Resource(uri=AnyUrl('test://test_resource'), name='test_resource', description='Test resource', mimeType='text/plain', size=None, annotations=None)]
Call tool result: meta=None content=[TextContent(type='text', text='Hello, world!', annotations=None)] isError=False
Call prompt result: meta=None description=None messages=[PromptMessage(role='user', content=TextContent(type='text', text='test prompt result', annotations=None))]
Read resource result: meta=None contents=[TextResourceContents(uri=AnyUrl('test://test_resource'), mimeType='text/plain', text='test resource data!')]
Websocket test completed

Starting HTTP client test
Connected to HTTP
Client session started
Client initialized
HTTP Request: POST http://127.0.0.1:8000/mcp/http "HTTP/1.1 200 OK"
Tool result: meta=None nextCursor=None tools=[Tool(name='echo_tool', description='Echoes the input', inputSchema={'properties': {'data': {'title': 'Data', 'type': 'string'}}, 'required': ['data'], 'title': 'echo_toolArguments', 'type': 'object'})] meta=None
HTTP Request: POST http://127.0.0.1:8000/mcp/http "HTTP/1.1 200 OK"
Prompts result: meta=None nextCursor=None prompts=[Prompt(name='test_prompt', description='', arguments=[])] meta=None
HTTP Request: POST http://127.0.0.1:8000/mcp/http "HTTP/1.1 200 OK"
Resources result: meta=None nextCursor=None resources=[Resource(uri=AnyUrl('test://test_resource'), name='test_resource', description='Test resource', mimeType='text/plain', size=None, annotations=None)] meta=None
HTTP Request: POST http://127.0.0.1:8000/mcp/http "HTTP/1.1 200 OK"
Call tool result: meta=None content=[TextContent(type='text', text='Hello, world!', annotations=None)] isError=False meta=None
HTTP Request: POST http://127.0.0.1:8000/mcp/http "HTTP/1.1 200 OK"
Call prompt result: meta=None description=None messages=[PromptMessage(role='user', content=TextContent(type='text', text='test prompt result', annotations=None))] meta=None
HTTP Request: POST http://127.0.0.1:8000/mcp/http "HTTP/1.1 200 OK"
Read resource result: meta=None contents=[TextResourceContents(uri=AnyUrl('test://test_resource'), mimeType='text/plain', text='test resource data!')] meta=None
HTTP test completed

Quick Start

1

Clone the repository

git clone https://github.com/jerome3o/mcp-transport-scratch
2

Install dependencies

cd mcp-transport-scratch
npm install
3

Follow the documentation

Check the repository's README.md file for specific installation and usage instructions.

Repository Details

Ownerjerome3o
Repomcp-transport-scratch
LanguagePython
License-
Last fetched8/10/2025

Recommended MCP Servers

💬

Discord MCP

Enable AI assistants to seamlessly interact with Discord servers, channels, and messages.

integrationsdiscordchat
🔗

Knit MCP

Connect AI agents to 200+ SaaS applications and automate workflows.

integrationsautomationsaas
🕷️

Apify MCP Server

Deploy and interact with Apify actors for web scraping and data extraction.

apifycrawlerdata
🌐

BrowserStack MCP

BrowserStack MCP Server for automated testing across multiple browsers.

testingqabrowsers

Zapier MCP

A Zapier server that provides automation capabilities for various apps.

zapierautomation