mcp-infra
Enables infrastructure introspection on Linux systems by providing tools to query and identify process names and PIDs listening on specific network ports.
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., "@mcp-infraWhat process is listening on port 8080?"
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.
mcp-infra
An MCP (Model Context Protocol) server for infrastructure introspection — lets AI assistants query which processes are listening on specific ports on your machine.
What it does
Exposes a single tool to MCP clients (like Claude Desktop or Claude Code):
get_processes_by_ports — given a list of port numbers, returns the process name and PID for each listening socket.
// Example response for ports [8000, 3000]
{
"8000": [{ "name": "python", "pid": "12345" }],
"3000": [{ "name": "node", "pid": "67890" }]
}This is useful when you want your AI assistant to understand what's running on your machine — e.g. "what's listening on port 5432?" or "check if my dev server is up."
Requirements
Python 3.11+
Linux (uses
ssfromiproute2)uv (recommended) or pip
Installation
git clone https://github.com/your-username/mcp-infra
cd mcp-infra
uv syncOr with pip:
pip install -e .Usage
Run directly
uv run server.py
# or
python server.pyAdd to Claude Desktop
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"infra": {
"command": "uv",
"args": ["run", "/path/to/mcp-infra/server.py"]
}
}
}Add to Claude Code
claude mcp add infra -- uv run /path/to/mcp-infra/server.pyTool reference
get_processes_by_ports(ports: list[int]) -> str
Returns a JSON string mapping each port to a list of processes.
Field | Type | Description |
|
| Port numbers to query |
Response shape per port:
name— process namepid— process ID as stringraw— unparsed line (fallback if parsing fails)error— error message ifssfailed for that port
How it works
Uses the ss command (ss -tlnp sport = :<port>) to list TCP sockets in LISTEN state, then parses the users:((...)) field to extract process names and PIDs.
Contributing
Pull requests are welcome. Keep it focused — this is intentionally a small, single-purpose server.
License
MIT
Available Tools
1 toolget_processes_by_portsA
Return all running processes listening on the given ports.
Args: ports: List of port numbers to check.
| Name | Required | Description | Default |
|---|---|---|---|
| ports | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'running processes' and 'listening on ports', which gives some behavioral context, but lacks details on permissions needed, rate limits, error handling, or what 'return' entails (e.g., format, pagination). This is a significant gap for a tool with no annotation coverage.
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 front-loaded with the core purpose in the first sentence, followed by a brief parameter explanation. It's appropriately sized with zero waste, making it easy to scan and understand quickly.
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?
Given the tool's low complexity (1 parameter, no nested objects) and the presence of an output schema (which handles return values), the description is mostly complete. It covers the purpose and parameter semantics adequately, though behavioral transparency could be improved to fully compensate for the lack of annotations.
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 must compensate. It adds meaning by explaining that 'ports' are 'port numbers to check', clarifying the parameter's purpose beyond the schema's basic type definition. However, it doesn't detail constraints like valid port ranges or handling of invalid inputs.
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 clearly states the specific action ('Return all running processes listening on') and resource ('the given ports'), with no sibling tools to differentiate from. It directly answers what the tool does without being vague or tautological.
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?
The description implies usage when you need to find processes by ports, but provides no explicit guidance on when to use this tool versus alternatives, prerequisites, or exclusions. With no sibling tools, the context is straightforward but lacks detailed usage instructions.
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
get_processes_by_ports
TDQS
Scored across 1 tool
With only one tool, there is no possibility of ambiguity or overlap with other tools, making disambiguation perfect.
The single tool name follows a clear verb_noun pattern (get_processes_by_ports), and with no other tools, consistency is inherently perfect.
A single tool is too few for a server named 'mcp-infra', which suggests a broader infrastructure management scope, making this an under-scoped and incomplete tool surface.
The tool surface is severely incomplete for an infrastructure domain; it only provides a specific query for processes by ports, lacking any other operations like system monitoring, resource management, or general process handling.
Related MCP Connectors
Monitors TLS/SSL certificate expiry, DNS resolution, and TCP port status for AI agents.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Gives AI agents a public IPv6 identity, hostname, port forwarding, web fetch, team mesh. Free tier.
- emisarOAuthdev.emisar
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.