MCP server exposing a UC Davis AI knowledge base (RAG) and web search
Three tools with clear, actionable descriptions (150-250 chars each). All have proper input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (search_*, web_search, fetch_url). Parameters include sensible defaults (top_n=5, max_results=5). Output schemas are documented in descriptions. Main gaps: no error handling guidance (e.g., what to do if vector store is unavailable), no tool annotations (readOnlyHint present but not declared), and fetch_url lacks input validation details. Composition is sound, tools are single-purpose and chainable (web_search → fetch_url). Naming is clear and unambiguous.
Fetch a public http(s) URL and return its main readable text — readability extraction for HTML pages, text extraction for PDFs. Use this to read a web_search result in full, or when the user gives you a link. Only public addresses are allowed (internal/private hosts are refused); large responses are size-capped and the text is truncated.
Semantic search over UC Davis's official AI policy and guidance documents (AI Council report, AI Steering Committee report, academic integrity guidance, GenAI literacy framework, and more). Returns the most relevant passages with their source document and page number so you can cite them. Does NOT synthesize an answer — read the passages and answer from them.
Search the public web via DuckDuckGo. Returns a list of results with title, URL, and a short snippet. Use for information not covered by the UC Davis AI documents, or for more recent developments.
No error recovery guidance in tool descriptions. If vector store is unavailable or web search fails, LLM has no hint what to do next.
fetch_url description does not specify input validation rules (e.g., 'Only public addresses allowed' is mentioned but no detail on what triggers rejection or how to handle private IPs).
Tool annotations (readOnlyHint, destructiveHint) are not declared in the MCP schema, even though all three tools are read-only. This prevents clients from optimizing caching or safety policies.
fetch_url parameter 'url' lacks format constraint (e.g., 'must match http:// or https://' pattern). LLM could pass invalid schemes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
web_search and fetch_url do not document rate limits or timeout behavior. Agents may not know when to back off or expect delays.