Browse documentation
Ten agent frameworks that reach unlob
Ten agent frameworks, and the two ways each of them can reach the index.
Two ways in, whichever framework you use
Through MCP. Most frameworks now have an MCP adapter. Connect it to
https://api.unlob.com/mcp?profile=grounding and the agent gets ground and
get_document with their descriptions and schemas intact — the right surface for most
tasks, and two schemas rather than a dozen in every request. Drop the profile and it gets
every tool, including corroborate and dossier, which have no equivalent in a generic
search tool. Nothing to define either way; see Profiles.
As one tool you write. A tool you define is a tool whose defaults you control. Pinning
max_age, min_independent_origins or require_role on ground — or
min_independent_sources and collapse=story on search — in your own code rather than
leaving them to the model is the single cheapest thing you can do for the quality of what
reaches the context window.
Neither is more correct. Use MCP when the agent should be able to reach for the graph; write the tool when it only ever grounds or searches.
The guides
| Framework | Language | MCP adapter |
|---|---|---|
| LangChain and LangGraph | Python | Yes |
| Claude Agent SDK | Python, TypeScript | Yes |
| LlamaIndex | Python | Yes |
| Vercel AI SDK | TypeScript | Experimental |
| OpenAI Agents SDK | Python | Yes |
| Pydantic AI | Python | Yes |
| CrewAI | Python | Via tools |
| Mastra | TypeScript | Yes |
| Google ADK | Python | Via functions |
| n8n | No code | REST is simpler here |
Using Claude directly, without a framework? Tool use, directly and the remote MCP connector. Using a desktop or editor client rather than building an agent? Connect a client.
What every one of these guides gets right
The examples differ per framework, but three things recur because they are what agents get wrong:
- Surface
partial. A search response withpartial: trueis a200that means part of the corpus was unreachable. A model handed a short list with no explanation reports it as “nothing found”. Every example passes that flag through rather than the raw JSON. - Branch on
retry-after, not on429. With the header it is a rate limit, and the header is the real wait in seconds — sleep it, do not substitute a constant. Without it the key is hard-capped and out of credits, and a retry loop cannot succeed. - Set the evidence bar in code.
min_independent_originsonground(ormin_independent_sourceson search) left to the model is a suggestion it can lower. Set as a default it is a floor — while still overridable when a single-source document is exactly what you want. - Read the receipt. A
groundanswer withstatus: insufficientand asource_roles_missinglist is telling the agent something; passstatusandcoverage.known_gapsthrough rather than only the evidence.
Nothing to install
There is no unlob package in any language. The API is HTTP and JSON, so the client in each of these guides is a function, not a dependency. If you want the no-framework version, the SDK quickstarts have it in five languages.
Next
- MCP tools — what each tool does
- Profiles — two tools, or all of them
- Filters and sorting — what to pin as a default
- Graph recipes
- Testing agents that call unlob — fixtures for the framework examples above
- Prompting an agent to use unlob well — the instructions every example’s system prompt repeats