mcp-infra
by chalshik
README.md
# 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.
```json
// 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 `ss` from `iproute2`)
- [uv](https://docs.astral.sh/uv/) (recommended) or pip
## Installation
```bash
git clone https://github.com/your-username/mcp-infra
cd mcp-infra
uv sync
```
Or with pip:
```bash
pip install -e .
```
## Usage
### Run directly
```bash
uv run server.py
# or
python server.py
```
### Add to Claude Desktop
Add this to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"infra": {
"command": "uv",
"args": ["run", "/path/to/mcp-infra/server.py"]
}
}
}
```
### Add to Claude Code
```bash
claude mcp add infra -- uv run /path/to/mcp-infra/server.py
```
## Tool reference
### `get_processes_by_ports(ports: list[int]) -> str`
Returns a JSON string mapping each port to a list of processes.
| Field | Type | Description |
|-------|------|-------------|
| `ports` | `list[int]` | Port numbers to query |
**Response shape per port:**
- `name` — process name
- `pid` — process ID as string
- `raw` — unparsed line (fallback if parsing fails)
- `error` — error message if `ss` failed 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
TDQS
A3.6/5.0
Scored across 1 tool
Disambiguation5/5
With only one tool, there is no possibility of ambiguity or overlap with other tools, making disambiguation perfect.
Naming Consistency5/5
The single tool name follows a clear verb_noun pattern (get_processes_by_ports), and with no other tools, consistency is inherently perfect.
Tool Count2/5
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.
Completeness1/5
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.