DevTools MCP
Click on "Install 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., "@DevTools MCPExplain this Python error: NameError: name 'x' is not defined"
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.
DevTools MCP
A small developer-utility MCP server, built to learn the Model Context Protocol end-to-end: server implementation, local testing, using an existing MCP, public deployment, and Smithery publishing.
1. Overview
DevTools MCP exposes four small developer tools over the Model Context Protocol: explaining an error message, validating/formatting JSON, generating a regex from a description, and summarizing text with an LLM (Groq). A minimal TypeScript/Vite dashboard lets you exercise the tools from a browser, connecting as a real MCP client.
Related MCP server: Log Analyzer MCP
2. Why MCP
MCP standardizes how an LLM host (Claude Desktop, an IDE, an agent) discovers and calls tools, instead of every project inventing its own bespoke tool-calling API. Building a real MCP server - not a REST API with an MCP label slapped on - was the primary learning goal of this project.
3. Architecture
MCP Client
|
MCP Protocol
|
DevTools MCP Server
|-- explain_error (local/deterministic)
|-- format_json (local/deterministic)
|-- generate_regex (local/deterministic)
`-- summarize_text
|
Groq API
|
GPT-OSS 120BThe server (server/server.py) is an mcp.server.MCPServer (MCP Python SDK
v2). It runs over stdio for local testing (MCP Inspector, Client(mcp))
and over Streamable HTTP (/mcp) for remote/browser access. The
TypeScript frontend (frontend/) is a genuine MCP client: it uses
@modelcontextprotocol/sdk's Client + StreamableHTTPClientTransport to
talk to the server directly over Streamable HTTP (CORS-enabled on the
server), not a hand-rolled REST bridge.
4. Tools
Tool | Inputs | What it does |
|
| Matches the error against a library of common error patterns (Python/JS/general) and returns a likely cause + practical fix. Local/deterministic. |
|
| Validates JSON and returns a pretty-printed version, or a precise parse error (line/column). Local/deterministic. |
|
| Matches the description against a small library of common regex patterns (email, URL, IPv4, date, UUID, etc.) and returns the pattern plus an explanation. Local/deterministic. |
|
| Calls Groq ( |
5. Project structure
devtools-mcp/
├── server/
│ ├── server.py # MCPServer + tool registration + ASGI app
│ ├── tools.py # explain_error / format_json / generate_regex logic
│ ├── ai.py # Groq-backed summarize_text logic
│ └── tests/
│ └── test_server.py # pytest suite using the SDK's in-memory Client
├── frontend/
│ ├── index.html
│ ├── src/
│ │ ├── main.ts # real MCP client (StreamableHTTPClientTransport)
│ │ └── style.css
│ ├── package.json
│ ├── tsconfig.json
│ └── vite.config.ts
├── .env.example
├── .gitignore
├── requirements.txt
├── render.yaml # optional Render Blueprint
├── README.md
└── EXISTING_MCP_EXPERIENCE.md6. Prerequisites
Python 3.10+
Node.js 18+ and npm (for the frontend, and to run the MCP Inspector via
npx)A Groq API key (only required for
summarize_text)(Optional, for deployment) A Render account and a Smithery account
7. Installation
git clone <this-repo>
cd devtools-mcp
python3 -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt8. Environment variables
Copy .env.example to .env and fill in what you need:
GROQ_API_KEY= # required for summarize_text
GROQ_MODEL=openai/gpt-oss-120b
MCP_ALLOWED_HOSTS= # only needed when deployed behind a real hostname
MCP_ALLOWED_ORIGINS= # comma-separated browser origins allowed via CORS.env is git-ignored. Never commit real secrets.
9. Local setup
Stdio (default, for local MCP clients):
python -m server.serverStreamable HTTP (for the frontend, or any HTTP-based MCP client), local only:
uvicorn server.server:app --host 127.0.0.1 --port 8000MCP_ALLOWED_HOSTS can stay unset locally - the SDK's built-in
localhost-only DNS-rebinding protection covers 127.0.0.1/localhost
automatically. Health check: curl http://127.0.0.1:8000/health.
10. MCP Inspector testing
# Against stdio:
uv run mcp dev server/server.py # requires uv; or: npx @modelcontextprotocol/inspector
# Against a running Streamable HTTP server:
npx @modelcontextprotocol/inspector --cli http://127.0.0.1:8000/mcp --method tools/listThis was run against the local Streamable HTTP server during development and verified all four tools are discoverable with correct input/output schemas (see "Testing" below for the exact results).
11. Frontend setup
cd frontend
npm install
npm run dev # http://localhost:5173In the running dashboard, set the server URL field to your MCP server's
/mcp endpoint (default http://localhost:8000/mcp), click Connect,
pick a tool, fill in the form, and click Run. For local use, start the
backend with MCP_ALLOWED_ORIGINS=http://localhost:5173 so CORS allows it.
Production build: npm run build (outputs to frontend/dist/).
12. Groq setup
Create an API key at console.groq.com.
Set
GROQ_API_KEY(and optionallyGROQ_MODEL, defaultopenai/gpt-oss-120b) in your.envor your deployment platform's environment variables.No other LLM provider is used anywhere in this project.
13. Existing MCP experience
See EXISTING_MCP_EXPERIENCE.md for the
required demonstration of using an existing MCP server (Context7) - what it
is, how it was connected, the actual query run, and what was learned.
14. Deployment to Render
Render's native Python runtime is used (no Docker required).
Dashboard setup:
Push this repo to GitHub.
In Render: New → Web Service → connect the repo.
Runtime: Python 3. Build command:
pip install -r requirements.txt. Start command:uvicorn server.server:app --host 0.0.0.0 --port $PORT.Set environment variables:
GROQ_API_KEY,GROQ_MODEL,MCP_ALLOWED_HOSTS=<your-service>.onrender.com,<your-service>.onrender.com:*, andMCP_ALLOWED_ORIGINS=<your-frontend-origin>(if you also deploy the frontend).Deploy. The MCP endpoint will be
https://<your-service>.onrender.com/mcp.
A render.yaml Blueprint is included as a convenience for the same setup.
Manual verification step required: actually deploying requires a Render account and was not performed as part of this response - see the completion report for what remains a manual step.
15. Smithery publishing
The current Smithery CLI supports publishing an already-hosted remote MCP server URL directly (no Docker/container packaging needed for this path):
npm install -g smithery
smithery auth login
smithery mcp publish "https://<your-service>.onrender.com/mcp" -n "<your-org>/devtools-mcp"After publishing, verify the four tools are exposed:
smithery mcp add "https://<your-service>.onrender.com/mcp" --id devtools-mcp
smithery tool list devtools-mcpManual step required: this needs a Smithery account and a live, publicly reachable Render deployment first; it was not performed as part of this response.
16. Public MCP usage
Once deployed, any Streamable HTTP MCP client can connect to:
https://<your-service>.onrender.com/mcpExample with the SDK's Client:
from mcp import Client
from mcp.client.streamable_http import streamable_http_client
async with streamable_http_client("https://<your-service>.onrender.com/mcp") as (r, w, _):
async with Client(r, w) as client:
await client.initialize()
print(await client.list_tools())17. Testing
Actually run in this environment:
pytest server/tests/ -vResult: 11 passed - tool discovery; valid, malformed, and empty
format_json input; matched and unmatched explain_error patterns
(including empty input); generate_regex for a known pattern (with a live
regex match check) and an unmatched description; summarize_text with a
missing GROQ_API_KEY and with empty input.
Also actually run (manual, outside pytest):
uvicorn server.server:appstarted successfully;/healthreturned{"status":"ok",...}.A raw
initializeJSON-RPC POST to/mcpreturned200.The real MCP Inspector CLI (
npx @modelcontextprotocol/inspector --cli) connected over Streamable HTTP, listed all four tools with correct schemas, and successfully calledgenerate_regex,explain_error, andformat_json(both valid and invalid JSON), andsummarize_text(correctly reported the missing-API-key error, since no real Groq key was available in this environment).Transport security verified: a request with a spoofed
Hostheader correctly received421 Misdirected Request.CORS preflight verified: an
OPTIONS /mcprequest withOrigin: http://localhost:5173returned200with the correctaccess-control-*headers onceMCP_ALLOWED_ORIGINSwas set.Frontend:
npx tsc --noEmitpassed with no errors;npm run buildsucceeded and producedfrontend/dist/.
Not verified (requires external accounts/credentials not available in
this environment): a real summarize_text call with a live Groq API key,
the Render deployment itself, and Smithery publishing/listing.
18. Limitations
summarize_textwas only tested end-to-end for its error paths; it has not been called with real Groq credentials.Render deployment and Smithery publishing require manual steps with your own accounts (see sections 14-15) and have not been performed here.
explain_errorandgenerate_regexuse small, hand-written pattern libraries, not an LLM - they're deliberately simple/deterministic per the project's scope, so they won't recognize every possible error or pattern description.The frontend has no authentication and is meant for local/demo use, per the project's explicit "no accounts/auth" scope.
19. Learning outcomes
What MCP is: a standardized protocol separating "providing context/ actions to an LLM" from "the LLM interaction itself," so a server built once (like this one) works with any compliant client.
Host / client / server: the host is the LLM application (Claude Desktop, or the app behind the browser dashboard); the client is the MCP-speaking component inside it (the SDK's
Client, or our frontend'sStreamableHTTPClientTransport-based client); the server is what we built - it never talks to a model directly.Tools vs. resources vs. prompts: tools are model-controlled (the LLM decides to call
format_json); resources are application-controlled data loads; prompts are user-invoked templates. This project only needed tools.Tool discovery and invocation: a client calls
tools/listto learn what's available (name, description, JSON-schema inputs/outputs, all derived automatically from Python type hints and docstrings), thentools/callto invoke one by name with arguments.Why MCP vs. a plain REST API: a REST API needs a bespoke integration per client; an MCP server describes its own capabilities and schemas, so any MCP-aware host can use it without custom glue code - demonstrated directly by connecting the same server to both the MCP Inspector and our own hand-built frontend client with zero server-side changes.
Where the LLM fits: only inside
summarize_text, which calls out to Groq. The rest of the server is plain deterministic code - a useful reminder that "MCP server" and "AI application" are not the same thing.Deployment realities: Streamable HTTP servers default to localhost-only Host/Origin allowlisting for safety, and that has to be explicitly opened up (
TransportSecuritySettings) once deployed behind a real hostname - confirmed hands-on by triggering and then fixing a421.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables interaction with OpenAI's Chat Completion and Assistants APIs, supporting assistant management, file operations, and direct queries to GPT models through standardized MCP tools.92
- FlicenseBqualityCmaintenanceEnables AI-assisted analysis of log files through advanced searching, filtering, and test execution capabilities. Supports time-based queries, pattern matching, test summarization, and code coverage reporting directly within compatible MCP clients.12
- AlicenseAqualityBmaintenanceEnables AI clients to use developer utilities like JSON formatting, JWT decoding, UUID generation, and more via MCP.122792MIT
- FlicenseNot gradedqualityDmaintenanceEnables conversational API testing via MCP, allowing users to make HTTP requests, decode JWT tokens, and validate JSON schemas through natural language.
Related MCP Connectors
Connect MCP clients to 2,000+ AI models without managing provider API keys.
An AI concierge that turns static forms into adaptive AI conversations. From any MCP client.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shxheerkhn/devTools-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server