Open-source EU-wide civic employment commons — MCP-composable copilot for users facing structural labor-market friction in Europe.
13 tools with complete JSON schemas and descriptions, but quality is uneven. Naming is verb-forward and mostly clear (suggest_*, add_*, find_*, scan_*, extract_*, import_*, get_*, query_*, export_*, record_*). Descriptions range 50 - 180 chars, meeting the 10 - 1024 baseline but lacking LLM-optimized detail on WHEN to use each tool and dependencies between them. Parameter descriptions are sparse or absent, most params lack guidance on format, constraints, or valid ranges. No output schemas documented. Error handling is minimal; no recovery guidance visible. Security: userId is passed as a parameter in every tool, which is acceptable for a user-scoped service, but no evidence of permission gates, audit logging, or secret injection patterns. Composition is reasonable, tools chain logically (discover → watchlist → scan → extract → import), but missing batch operations and pagination guidance.
Create a company watchlist entry without scanning external pages.
Report likely duplicates among discovered direct-company jobs.
Export a discovered job as EURES-compatible.
Extract jobs from supplied HTML without fetching: tries known ATS adapters first (Greenhouse / Lever / Personio), falls back to JobPosting JSON-LD parsing and visible job-link anchor extraction.
Find an obvious public career page from a company homepage, respecting robots.txt.
Return dashboard metrics for company watchlist and direct-company discoveries.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields without knowing response structure.
Parameter descriptions are missing or minimal. Most params (targetRoles, careerPageUrl, html, scopes, context, etc.) lack guidance on format, constraints, or valid ranges. LLMs cannot validate input without explicit constraints.
No error handling guidance visible. Tools do not document what errors are retryable, user-fixable, or fatal. No recovery paths (e.g., 'If company not found, try suggest_relevant_companies first').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Return the user's portable civic profile (subset they have consented to share). Other open civic agents read this with explicit user consent to compose their own recommendations with the user's employment + residence + outcomes context.
Import a reviewed discovered job into the normal job pipeline.
Emit a structured referral to another open civic agent. The calling agent constructs a referral the user can act on; the user retains the choice to follow up or decline. Composition pattern 1 (sequential handoff) per 09-mcp-composition.md.
Look up ESCO skill or occupation codes by free-text query. Cross-agent shared taxonomy. Backed by the v1-curated 2026-05-18 reference dataset (~80 entries spanning ISCO-08 occupations + ESCO skills, aligned to the seven-persona panel and Bundesagentur-für-Arbeit 2025 shortage codes).
Record a measured user outcome.
Scan one known public career page with robots.txt and max-page guards.
Suggest curated healthcare-management companies and fallback categories from role, industry, and location preferences.
Tool descriptions lack WHEN-to-use guidance and dependencies. E.g., scan_company_career_page does not explain that find_company_career_page should be called first, or what happens if careerPageUrl is invalid.
No pagination or result-limiting guidance. Tools like get_company_watchlist_summary and query_esco_skill do not document max result counts, pagination parameters, or how to handle large datasets.