triage-mcp
An MCP server over my ai-triage-agent queue. A local LLM classifies support tickets and drafts replies, a human approves or rejects every one, and this server lets any MCP-capable AI client read that queue and the decision log.
It answers questions like "whats waiting for review?" or "what did I reject this week and why?" straight from the files the agent writes. Four tools, all read-only. The model can look at the queue but it cant approve, reject or send anything.
Tools
| Tool | What it does |
|---|---|
queue_status() |
Counts for inbox, pending review by priority, outbox and logged decisions |
pending_items(priority) |
Tickets waiting for review, most urgent first, optional priority filter |
recent_decisions(limit) |
Latest human decisions from the audit log, newest first |
search_decisions(query) |
Search the decision log by id, outcome, category, priority or reject reason |
Setup
python3 -m venv .venv
.venv/bin/pip install mcp
It reads ~/aiProjects/aminWork/automation-portfolio/ai-triage-agent/. Change DATA_DIR at the top of triage_mcp.py if your copy lives somewhere else.
Wire it into Claude Code:
claude mcp add triage -- /path/to/triage-mcp/.venv/bin/python /path/to/triage-mcp/triage_mcp.py
Demo
What it looks like from Claude Code:
> anything urgent sitting in the triage queue?
⏺ triage · pending_items()
2 pending item(s):
demo-014 P1 security_incident -> security-team (high): User entered their password on a fake helpdesk link and asks what to do next.
demo-017 P3 software_issue -> service-desk (medium): Spreadsheet app crashes when opening one monthly report file.
⏺ One P1. demo-014 looks like a phishing hit and is routed to security.
Id review that one first. The Excel crash can wait.
The tickets above are demo data. The format is exactly what the server returns.
Design notes
- Read-only by construction. No tool writes to the queue, the outbox or the log. Approving stays in
review.pywith a human at the keyboard. - Only metadata crosses the protocol. Ticket bodies, extracted entities and reply text never leave the server. Summaries and reject reasons are cut to 100 characters with emails and home paths masked.
- Small on purpose. One file, standard library plus the
mcpSDK.
Honest notes
- It only reads what ai-triage-agent has already written. With an empty
pending/folder most answers are zeros, which is normal between triage runs. - The masking is regex based. It catches emails and home paths, not names written into a summary.
- All ticket content in the demo and the tests is made up. The logic is tested against a synthetic queue in
test_server.py. Runpython test_server.py.
About
Al Amin Bashir Afara, Dubai · github.com/aminafara123 · linkedin.com/in/aminafara
Release files for triage-mcp 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| triage_mcp-1.0.0.tar.gz | 5.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| triage_mcp-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.8 kB
Release files / triage_mcp-1.0.0.tar.gz
| Download URL | triage_mcp-1.0.0.tar.gz |
|---|---|
| Size | 5.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
67963ff6c0488367e66d15c7fa558e370b83906bb427148b74ced0076d55ef31
|
|
BLAKE2b-256 checksum How to use checksums |
f4e40fe2fde1f4ca16518080fa6c1788b33490cfaaaf853d4817a1249418dec3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / triage_mcp-1.0.0-py3-none-any.whl
| Download URL | triage_mcp-1.0.0-py3-none-any.whl |
|---|---|
| Size | 6.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9511fbc2e325c68c894a0d978f98c685d39abaebabca204aba3d3d1c84c28186
|
|
BLAKE2b-256 checksum How to use checksums |
c9eb4ffd4a0b2f3dbe4c9139147727a86541a7cbe79ecf7b56021f1534879b2b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|