expert-factory
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@expert-factorySearch the expert for async patterns"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
expert-factory
ef builds a queryable expert out of a pack of material — cloned repos,
fetched pages, papers, and your own notes — and serves it to an agent as one
knowledge graph over stdio MCP, plus a skill that teaches the agent to use it.
uv tool install . # or: pipx install .One install carries the whole toolchain: ef imports graphify as a library, so
there is no separate binary, interpreter, or container to line up.
Build a pack
Packs live in ./experts/<name>, resolved from the current directory — so a
workspace is just a directory you cd into, and ef never searches upward.
ef clone research https://github.com/effect-ts/effect --title "Effect TS"
ef clone research https://github.com/some/monorepo --paths content/docs
ef add research https://arxiv.org/pdf/2501.12345
ef add research ~/Downloads/notes-on-fibers.md
ef build researchef build extracts everything in the pack into a single graph and writes the
skill. Semantic extraction is the default and spends LLM tokens; --code-only
takes the cheap AST-only path and drops docs, papers and images from the
semantic pass. --backend is required only when an LLM is actually invoked.
Each pack holds four content layers plus its graph and metadata:
Path | Contents |
| Pristine clones, fast-forwarded by |
| Fetched pages, papers and images, with provenance frontmatter |
| Markdown you wrote yourself |
|
|
| The authoritative source list: origin, lifecycle, checksums |
| Generated skill teaching agents the served tools |
The graph sits at graph/ rather than inside a clone, so git status in a
checkout stays clean and every clone can always fast-forward.
expert.json is authoritative, not a cache: every file in raw/ and notes/
needs an entry. ef build refuses on files with no recorded origin (listing
them, and suggesting --adopt-all) and on entries whose file is gone, because a
graph that misreports its own coverage is worse than one that fails to build.
Extraction deliberately ignores VCS ignore files. A pack holds material that is
meant to stay uncommitted, so any sane workspace gitignores repos/ and
graph/ — and since the extractor walks up to the VCS root, honoring those
rules would let the line that keeps a pack out of git silently empty its corpus.
The pack's generated .graphifyignore still applies, and it restates the
credential patterns (.env, *.pem, id_rsa, …) that the clone's own
.gitignore would otherwise have covered, so a stray secret is never sent to an
LLM.
Related MCP server: kg-memory-mcp
Serve a pack
ef run is a plain stdio process — no container, port, image, or daemon. It
writes nothing and validates the pack before the MCP handshake, so being spawned
in the wrong directory fails with a readable message instead of a dead transport.
{
"mcpServers": {
"research expert": {
"command": "sh",
"args": ["-c", "cd /abs/path/to/experts/research && exec ef run"]
}
}
}The cd is the shell's job, not a cwd key: Claude Code ignores cwd on a
stdio server and spawns the process wherever the client was launched, where
ef run would find no manifest and exit. The pack is addressed by that one
path, so moving or copying it only changes that line. Copy its SKILL.md to
~/.claude/skills/<name>-expert/SKILL.md (or the consuming project's
.claude/skills/).
Tools: search (graph traversal), read_source (real text behind a node —
code, a fetched page, a paper, or a note), neighbors (callers, imports,
references), corpus_info (size, source composition, last reconciled).
Keep it fresh
ef update research # pull every refreshable source, then refresh the graph
ef sync research # rewrite manifest and skill from the graph on disk
ef list # every pack: nodes, size, last reconciled, compositionef update fast-forwards each git source (refusing rather than discarding local
modifications), then picks a refresh path and prints which one and why:
noop — nothing changed upstream.
ast — only code changed. Cheap, no LLM.
semantic — a doc, paper or image changed. graphify's AST-only update deliberately preserves existing semantic nodes, so a doc change has to force the expensive path or the graph keeps describing text that is no longer there.
Fetched pages and papers are snapshots with no refresh lifecycle; a changed checksum is reported as information, not as a broken pack.
A refresh re-extracts only what changed: graphify's semantic cache is left
readable, so unchanged files cost nothing the second time. --force bypasses
that cache and rebuilds the whole corpus — correct after changing the backend,
model or scope, and otherwise just an expensive way to get the same graph.
Both ef build and ef update then name the communities and rewrite
GRAPH_REPORT.md, because extraction detects communities without naming them
and never writes the report — skipping it would leave the pack describing a
graph that no longer exists. The first labeling pass spends a few LLM calls;
later ones reuse the saved names and only rename communities whose membership
actually changed.
Layout
src/ef/—workspace(cwd-based pack resolution),manifest,scoping,sources,extraction,skill,server,clitests/— pytest against real entry points and emitted artifacts; no test spends an LLM token
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceAn MCP server that builds a knowledge graph from code and text documents, enabling Q\&A and implementation planning via tools like graph_create, graph_plan, and graph_query.Last updated7MIT
- Flicense-qualityDmaintenanceAn in-memory knowledge graph MCP server that gives coding agents structural and semantic recall over codebases by indexing Python source, ADR documents, and project configuration, exposing 7 tools for search, traversal, context retrieval, and natural-language Q&A.Last updated
- Flicense-qualityDmaintenanceBuilds a persistent knowledge graph from notes and conversations, enabling semantic search, entity exploration, and GTD task management from any MCP-compatible AI assistant.Last updated3
- Alicense-qualityCmaintenanceAn MCP server that enables AI agents to generate, search, and reason over knowledge graphs from code, databases, docs, and open-data portals without requiring an LLM or API key.Last updatedApache 2.0
Related MCP Connectors
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Turn a GitHub repo or docs site into agent-ready context: pack it or search it, over MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/edenismine/expert-factory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server