MCP server for extracting and managing Indian government job notifications from PDFs, with LLM-powered analysis and PostgreSQL storage
GovJobExtractor has 8 tools with basic descriptions and partial schemas. Naming is verb-forward but some tools combine multiple concerns (e.g., fetch_and_extract_jobs). No output schemas documented. Error handling is absent from visible code. Security concerns: DATABASE_URL and LLM_API_KEY exposed in environment without validation. Tool descriptions average ~80 chars (below 194-char baseline), and many parameters have no descriptions at all. Per-tool scores range 25 - 55; average 42.
Analyze PDF content using LLM to extract structured job information
Detect the recruiting commission from PDF content, URL, or filename using pattern matching and heuristics
Extract job details from a specific PDF file using LLM analysis
Fetch government job PDFs from specified URLs, extract job details using LLM analysis, and store in database
Retrieve the complete commission registry with all detection patterns and metadata
List all PDF files currently stored in the storage directory
Query the PostgreSQL database for government job records with filters
Parameter descriptions missing or minimal. 'urls', 'pdf_path', 'commission', 'state', 'exam_kind', 'limit', 'interval_seconds' lack guidance on format, constraints, or valid values. Rubric requires every parameter to have a non-empty description explaining what it controls.
No output schemas documented. Tools return data but LLMs cannot infer response structure. Rubric requires 100% of A+ tools to have documented return types. This forces LLMs to guess field names and types for downstream tool chaining.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Start background daemon thread to periodically fetch and extract jobs from configured sources
fetch_and_extract_jobs combines two concerns: fetching PDFs and extracting jobs. Rubric pattern:tool requires each tool to do exactly one thing. Split into fetch_pdfs and extract_jobs_from_pdf (already exists separately).
No error handling guidance in tool definitions. Rubric requires error responses to tell LLM what to do next (retryable, user-fixable, fatal). No visible try-catch, validation, or recovery hints in code.
Credentials exposed in environment without validation. DATABASE_URL, LLM_API_KEY, LLM_BASE_URL read from .env without sanitization. Rubric pattern:secret-injection requires credentials never appear as tool parameters and must use server-side injection. Current approach is acceptable but lacks validation and audit logging.