raw-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@raw-mcpUse the calculate_length tool to count the characters in 'hello world'."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
raw_mcp
A minimal Model Context Protocol server written in pure Python — no MCP SDK, no third-party libraries. It speaks JSON-RPC 2.0 over stdio, which is how MCP clients talk to servers they launch as a subprocess.
Prerequisites
uv (
brew install uv)
Related MCP server: Counting MCP Server
Layout
server.py— the MCP server (stdlib only)test_server.py— a smoke test that drives the server through a full handshakepyproject.toml— uv project metadata (no runtime dependencies)
Run the tests
uv run test_server.pyRun the server manually
The server reads JSON-RPC from stdin and writes responses to stdout, so you can poke at it by hand:
uv run server.pyThen paste a line and press enter:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{}}}Diagnostic logs go to stderr so they never corrupt the JSON on stdout.
Use it from an MCP client
Point any MCP client (Claude Desktop, etc.) at the server via uv. Example
claude_desktop_config.json:
{
"mcpServers": {
"raw-mcp": {
"command": "uv",
"args": ["run", "server.py"],
"cwd": "/Users/jameswhite/conductor/workspaces/raw_mcp/san-salvador"
}
}
}Use it from Claude Code
Register the server with Claude Code's MCP support, then call the tool from a session.
Add the server
claude mcp add raw-mcp -- uv run --directory /Users/jameswhite/conductor/workspaces/raw_mcp/san-salvador server.pyraw-mcpis the name it shows up as.Everything after
--is the launch command. Usinguv run --directory <path>means it works regardless of which directory you start Claude Code from. If you always launch from this folder,claude mcp add raw-mcp -- uv run server.pyis enough.Default scope is
local(just you, this project). Add-s userto make it available everywhere, or-s projectto share it via a committed.mcp.json.
Verify it connected
claude mcp list # shows configured servers + connection status
claude mcp get raw-mcp # shows the launch command for this oneraw-mcp should report ✔ Connected.
Use it
MCP servers are loaded at session startup, so open a fresh interactive Claude Code session (or restart your current one), then:
Run
/mcp— you should seeraw-mcpconnected with one tool,calculate_length.Ask Claude to use it, e.g. "Use the raw-mcp calculate_length tool on the string 'hello world'." The tool is exposed as
mcp__raw-mcp__calculate_length.
Remove it when done
claude mcp remove raw-mcpThe one tool
calculate_length — returns the character count of a string.
How it works
initialize — the handshake. The server advertises
protocolVersionand itstoolscapability.notifications/initialized — the client acknowledges. It's a notification (no
id), so the server sends nothing back.tools/list — the server returns its tool definitions and JSON schemas.
tools/call — the client invokes a tool; the server returns
contentblocks.
Adding a tool is two steps: append its definition to TOOLS, then handle its name
in call_tool.
Available Tools
1 toolcalculate_lengthA
Returns the character count of a string
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It clearly states the returned result, but it does not disclose edge-case behavior such as Unicode code point handling, empty strings, or whether whitespace is counted. For a simple pure function this is acceptable but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler or redundant detail. It delivers the core behavior immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one simple parameter, no annotations, and no output schema, the description provides the essential return behavior. It could mention return type or edge cases, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate for parameter meaning. It refers to 'a string', which maps to the single 'text' parameter, but it does not explicitly name the parameter or add constraints. The parameter name and type are self-explanatory enough to make this minimally viable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('returns') and resource ('character count of a string'), making the tool's function immediately clear. It also adds precision by specifying character count rather than byte length or other length metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit usage guidance or alternatives are provided, but the purpose is simple enough that when to use the tool is implied: whenever a character count of a string is needed. There are no siblings to differentiate from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.0- First observed
calculate_length
TDQS
Scored across 1 tool
Only one tool exists, so there is no possibility of confusing it with another tool. The tool's purpose is clearly defined and isolated.
The single tool name follows a clear verb_noun pattern (calculate_length), which is internally consistent and self-explanatory.
A single trivial tool for character counting is extremely thin for a server and feels like a placeholder rather than a coherent toolset.
The server provides only string length calculation, leaving substantial gaps for any raw string manipulation tasks. The domain is severely underrepresented, offering a dead-end surface.
Related MCP Connectors
Text statistics & readability MCP.
Count occurrences of any character in your text instantly. Specify the character and get precise c…
Host your MCP tool over streamable HTTP in one command.
61 text, security, converter, calculator, and PDF tools -- callable via MCP on one host.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides a tool to count occurrences of specific characters in text, serving as a simple example of building MCP servers with FastMCP and Python.-
- FlicenseAqualityDmaintenanceA remote MCP server that provides a counting tool, e.g., to count letters in words.11-
- AlicenseNot gradedqualityDmaintenanceMCP server that counts the number of Chinese characters (excluding punctuation, spaces, English, and numbers) in a given text, compatible with Streamable HTTP and JSON-RPC.MIT
- AlicenseAqualityAmaintenanceZero-dependency stdio bridge to Moltline Studio's fleet of 14 hosted MCP servers covering code review, time operations, data transforms, business ops, education, research, outreach and more. Free tier requires no registration; premium tools unlock with a license. Independently audited, MCPize Verified A.10MIT