Multiple MCP servers for querying a person's skills, experience, and knowledge graph with semantic search and evidence-backed results. Includes public demo, customer-facing private/public tiers, and a private server variant.
This server exhibits significant definition quality issues. The 16 tools are heavily duplicated across three deployment variants (public, customer, private), creating maintenance burden and confusion. Tool descriptions are verbose (300-500+ chars, well above the 10-200 char baseline for LLM optimization) and repetitive, with excessive caveats that dilute clarity. Parameter schemas are present but minimal: query_knowhow has only 'query' (string) and 'similarity_floor' (number) with no enum constraints or validation ranges. list_by_type accepts a 'type' parameter but provides no enum constraint in the schema, the description lists valid types as prose, forcing LLMs to parse text rather than use structured validation. skill_evidence and entry_details have single-parameter schemas with no validation. No output schemas are documented in the source code. Error handling is absent, no guidance on what happens when a query returns no results, when an entry ID is invalid, or how similarity_floor bounds are enforced. The server lacks idempotency hints, destructive operation markers, and recovery guidance. Tool composition is poor: query_knowhow and list_by_type serve overlapping purposes (search vs. list), yet descriptions do not clearly disambiguate when to use each. No pagination support is visible despite tools returning capped result sets (10 results for query_knowhow). The public/private/customer split duplicates tool definitions rather than composing them, violating DRY principles.
Get full details for a specific entry by ID, including all metadata, evidence sources, and related entries grouped by tag and provider. Returns the entry itself plus related_entries (other entries sharing tags or providers, capped at 15 per relation group but with true counts so truncation is visible).
Get full details for a specific entry by ID, including all metadata, evidence sources, and related entries grouped by tag and provider. Returns the entry itself plus related_entries (other entries sharing tags or providers, capped at 15 per relation group but with true counts so truncation is visible).
Get full details for a specific entry by ID, including all metadata, evidence sources, and related entries grouped by tag and provider. Returns the entry itself plus related_entries (other entries sharing tags or providers, capped at 15 per relation group but with true counts so truncation is visible). Evidence tier is included with every related entry.
PRIVATE: Get full details for a specific entry by ID from the complete private dataset, including all metadata, evidence sources, and related entries grouped by tag and provider. Returns the entry itself plus related_entries (other entries sharing tags or providers, capped at 15 per relation group but with true counts so truncation is visible). Evidence tier is included with every related entry.
List all entries of a specific type (e.g. 'course', 'project', 'certification'). Returns the complete, uncapped set with no similarity ranking. Use this for 'list every X' or 'how many X' questions. Unlike query_knowhow (semantic search), this is exact type matching with no ranking -- every entry of the requested type is included, sorted alphabetically by label.
Excessive tool duplication across three deployment variants (public, customer, private). Same four tools (query_knowhow, list_by_type, skill_evidence, entry_details) are defined identically in three separate files, violating DRY and creating maintenance burden. No composition or inheritance pattern visible.
Descriptions are 300-500+ characters, far exceeding the 10-200 char baseline for LLM optimization. Verbose caveats ('Clearing the similarity floor means...', 'read each result's actual label...') dilute clarity and waste tokens. Descriptions should state WHAT, WHEN, and WHY in 50-150 chars.
Parameter 'type' in list_by_type lacks enum constraint in schema. Valid types are listed as prose in the description ('course, project, certification...'), forcing LLMs to parse text rather than use structured validation. Schema should declare type as enum with explicit allowed values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
List all entries of a specific type. Returns the complete, uncapped set with no similarity ranking. Use this for 'list every X' or 'how many X' questions. Valid types include: course, project, certification, education, endorsement, position, profile, recommendation, article, career_interest, job_application, organization, language, honor, publication, patent, volunteering, test_score, skill_assessment, saved_job_alert, job_seeker_preferences, saved_answer.
PRIVATE: List all entries of a specific type from the complete private dataset. Returns the complete, uncapped set with no similarity ranking. Valid types include: course, project, certification, education, endorsement, position, profile, recommendation, article, career_interest, job_application, organization, language, honor, publication, patent, volunteering, test_score, skill_assessment, saved_job_alert, job_seeker_preferences, saved_answer.
List all entries of a specific type (e.g. 'course', 'project', 'certification'). Returns the complete, uncapped set with no similarity ranking. Use this for 'list every X' or 'how many X' questions. Unlike query_knowhow (semantic search), this is exact type matching with no ranking -- every entry of the requested type is included, sorted alphabetically by label.
Search this person's real, grounded skills/experience graph for a topic using semantic search. Returns only entries with real evidence -- never guesses. Every entry here represents something actually done or completed (project, certification, position, course, or education) -- this public dataset never includes saved-but-not-worked jobs or applications. This is SEMANTIC search ranked by relevance and capped at 10 results -- it is NOT exhaustive. For 'list every X' or 'how many X' questions, use list_by_type instead -- it returns the complete, uncapped set with no similarity ranking involved. Clearing the similarity floor means 'closest available match', not 'confirmed match' -- read each result's actual label/description/type before citing it as evidence for the specific topic queried. Each result also carries source_url/captured_at/provider (the real evidence behind it, when available) and source_note (explaining why not, when the underlying source has no link) -- use these to answer a disputed claim with actual backing evidence rather than just the description text.
Search this person's real, grounded skills/experience graph for a topic using semantic search. Returns only entries with real evidence -- never guesses. Every entry here represents something actually done or completed (project, certification, position, course, or education). This is SEMANTIC search ranked by relevance and capped at 10 results -- it is NOT exhaustive. For 'list every X' or 'how many X' questions, use list_by_type instead. Clearing the similarity floor means 'closest available match', not 'confirmed match'. Each result carries source_url/captured_at/provider (the real evidence behind it, when available) and source_note (explaining why not, when the underlying source has no link).
Search this person's real, grounded skills/experience graph for a topic using semantic search. Returns only entries with real evidence -- never guesses. Every entry here represents something actually done or completed (project, certification, position, course, or education) -- this public dataset never includes saved-but-not-worked jobs or applications. This is SEMANTIC search ranked by relevance and capped at 10 results -- it is NOT exhaustive. For 'list every X' or 'how many X' questions, use list_by_type instead -- it returns the complete, uncapped set with no similarity ranking involved. Clearing the similarity floor means 'closest available match', not 'confirmed match' -- read each result's actual label/description/type before citing it as evidence for the specific topic queried. Each result also carries source_url/captured_at/provider (the real evidence behind it, when available) and source_note (explaining why not, when the underlying source has no link) -- use these to answer a disputed claim with actual backing evidence rather than just the description text.
PRIVATE: Search this person's complete skills/experience graph (including private data like job applications, saved jobs, career interests, and job seeker preferences) using semantic search. Returns only entries with real evidence. This is SEMANTIC search ranked by relevance and capped at 10 results -- it is NOT exhaustive. For 'list every X' or 'how many X' questions, use list_by_type instead. Clearing the similarity floor means 'closest available match', not 'confirmed match'. Each result carries source_url/captured_at/provider (the real evidence behind it, when available) and source_note (explaining why not). Evidence tier (demonstrated vs signal_only) is included with every result.
Look up all evidence for a specific skill/tag, grouped by evidence_tier (demonstrated vs signal_only) then by type. Returns entries sorted by captured_at (oldest first). Null-dated entries are moved to the end and counted separately in undated_count. This is exact tag matching (not semantic search) and returns the complete, uncapped set. Useful for answering 'what evidence backs this skill' or 'how many different ways has this been demonstrated'.
Look up all evidence for a specific skill/tag. Returns entries grouped by type, sorted by captured_at (oldest first). Null-dated entries are moved to the end and counted separately in undated_count. This is exact tag matching (not semantic search like query_knowhow) and returns the complete, uncapped set -- useful for answering 'what evidence backs this skill' or 'how many different ways has this been demonstrated'.
PRIVATE: Look up all evidence for a specific skill/tag from the complete private dataset, grouped by evidence_tier (demonstrated vs signal_only) then by type. Returns entries sorted by captured_at (oldest first). Null-dated entries are moved to the end and counted separately in undated_count. This is exact tag matching (not semantic search) and returns the complete, uncapped set. A tier reading 0 is exactly the signal this tool exists to surface.
Look up all evidence for a specific skill/tag. Returns entries grouped by type, sorted by captured_at (oldest first). Null-dated entries are moved to the end and counted separately in undated_count. This is exact tag matching (not semantic search like query_knowhow) and returns the complete, uncapped set -- useful for answering 'what evidence backs this skill' or 'how many different ways has this been demonstrated'.
No output schemas documented in source code. Tools return capped result sets (query_knowhow: 10 results, entry_details: 15 per relation group) but no pagination parameters (limit, offset, next_cursor) are visible. LLMs cannot plan multi-page queries or know when results are truncated.
No error handling guidance. No documentation of what happens when query_knowhow returns zero results, when entry_details receives an invalid ID, or how similarity_floor bounds (0.0-1.0) are enforced. Error responses should guide LLM recovery (e.g., 'Try list_by_type instead').