MCP server for managing portfolio content without touching code. Exposes tools to add projects, update skills, fetch contact submissions and chat analytics, update profile fields, and rebuild the RAG vector index.
Server exposes 6 tools with reasonable naming (verb_noun pattern) and documented schemas. However, descriptions are inconsistent in depth and quality. Most parameter descriptions are present but generic. Output schemas are not explicitly documented. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Missing idempotency guarantees on write operations. Average tool quality is fair but below production baseline.
Add a new project to context/projects-manifest.json. Required: title, slug (URL-safe), category, description, tech (list). Optional: featured, problem, solution, live_url, github_url, metrics, highlights.
Return chatbot session stats and sample user questions. days: look-back window, default 30, max 90.
Fetch recent contact form submissions from PostgreSQL. days: look-back window, default 7, max 90.
Re-run scripts/seed-rag.py to refresh the Qdrant vector index. Uses backend/.venv/bin/python if present, else current Python interpreter.
Update a named field in context/murad-profile.md. Supported fields: email, whatsapp, linkedin_url, github_url, location, title.
Update a skill category's items in context/skills-manifest.json. category: one of ai_and_agents | frontend | backend | devops_and_cloud | automation items: list of {"name": "...", "level": "advanced|intermediate"}
Output schemas not documented. Tools return dicts with success/error fields, but LLMs cannot predict response structure for downstream planning.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints.
Error messages lack recovery guidance. Errors return code + message but do not suggest next steps (e.g., 'DUPLICATE_SLUG' should suggest 'Try a different slug or call get_projects to see existing slugs').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
rebuild_rag description is vague ('Re-run scripts/seed-rag.py'). Does not explain when to call it, what it does to the chatbot, or expected duration. LLMs may misuse it.
get_contact_submissions and get_chat_analytics lack pagination. No limit parameter documented; unclear if results are capped. Large result sets could exhaust context.