Skip to main content
Glama

moe — a team of domain experts, as agent skills

moe packages a mixture of domain experts as installable skills + subagents for your coding agent (Claude Code, Codex, Pi, …). Each expert owns a curated knowledge folder built from your materials (books, articles, docs); it answers by searching that folder (grep/read) and citing it — no RAG, no vector DB, no embeddings. A router skill picks the right expert(s) for a question and synthesizes a cited answer.

Install

dist/ is committed, so you never need Python to use the experts. Install with npx — with no flags it auto-detects your installed agent(s) (~/.claude, ~/.codex, .agents/.pi) and scope:

npx github:tiennt235/moe install       # or: npx skills add tiennt235/moe

# then, inside your agent:
/moe ask "which valve is on the left side of the heart?"

Related MCP server: pramana-mcp

How it works

  • Expert = subagent. experts/<name>/EXPERT.md (optional guidance) + experts/<name>/knowledge/ (built markdown + INDEX.md). The expert reads the index, greps the files, and cites source · section · page.

  • Router = skill. Reads the roster (experts.yaml) and picks the matching expert(s) by reasoning over their descriptions — no embeddings. Then delegates and synthesizes.

  • Retrieval = agentic file search. Coding agents are already great at grep/read; that is the retrieval engine. Citations come from each knowledge file's front-matter + headings.

Install targets & delegation

Host

Installs to

Delegation

Claude Code

.claude/skills/moe + .claude/agents/moe-*

native subagents (Agent tool)

Codex

.agents/skills/moe + .codex/agents + AGENTS.moe.md

native subagents; paste the snippet into AGENTS.md

Pi / generic

.agents/skills/moe

inline expert-mode (no subagent primitive)

npx github:tiennt235/moe install --providers=claude,codex,agents --scope=project   # or --scope=global

Claude Code can also install via plugin marketplace (plugin/plugin.json), and any Agent-Skills host via npx skills add tiennt235/moe.

Portability

The repo is the shareable expert team — dist/ and knowledge/ are committed. Anyone gets your experts with npx github:tiennt235/moe install (or npx skills add tiennt235/moe). No database, snapshot, or re-embedding.

Layout

experts.yaml            roster (drives routing)
experts/<name>/         EXPERT.md · materials/ · knowledge/ (built)
skill/moe/              router skill source (SKILL.md + commands)
templates/              shared expert-behavior template
src/moe/                Python builder (extract → knowledge → dist)
bin/moe.mjs             Node umbrella CLI (install/build/scaffold/list)
dist/{claude-code,codex,agents,dev}/   committed per-host builds
plugin/plugin.json      Claude Code marketplace manifest

Contributing

Building experts is the authoring path, which needs Python (the material extractor). Clone the repo, then add experts one of two ways.

Add an expert by hand

uv run moe list                              # show the roster
uv run moe scaffold neurology -d "Clinical neurology…"   # new expert
#   drop material into experts/neurology/materials/, then:
uv run moe build && npx github:tiennt235/moe install

Add materials as path: (local) or url: entries under an expert in experts.yaml. Supported formats: PDF (+OCR), EPUB, MOBI (via Calibre), HTML, Markdown/text. (uv run moe also works as python -m moe or pip install -e . && moe.)

Or let the expert-builder do it

moe ships a meta-expert that builds other experts for you, so you rarely edit experts.yaml by hand. It is dev-only: it runs the Python authoring path, so it never ships to end users and lives only in the dev build.

Onboard it once, from a clone of this repo:

uv run moe build                             # builds knowledge + dist/ (incl. the dev build)
npx github:tiennt235/moe install --dev       # deploys the dev build into this repo's .claude/

Then, inside your coding agent, delegate to the moe-expert-builder subagent (or just ask, and the router routes to it). It works in two modes:

  • Guided ingest — give it a topic and materials (file paths or URLs); it ingests exactly those. Example: "build a neurology expert from these two PDFs and this article."

  • Auto-research — give it only a topic; it searches for authoritative, openly-licensed sources, proposes a shortlist for you to approve, then builds from the approved set. Example: "build a stoicism expert from public-domain sources."

Either way it scaffolds the expert, patches experts.yaml, runs uv run moe build, verifies the knowledge and its citations, and reports. Deploy the result to end users with npx github:tiennt235/moe install.

Available Tools

3 tools
ask_expertsA

Ask the mixture of domain experts a question.

The server routes the question to the most relevant expert knowledge base(s), runs hybrid retrieval + reranking, and returns the best-supported passages. EACH passage includes a citation (title, author, location). You MUST cite these sources in your answer using their bracket numbers, and answer only from them.

Args: question: The natural-language question. top_k: Max passages to return (default 8). experts: Optional list of expert names to force; omit to auto-route. synthesize: If true, the server also returns a grounded, cited answer string.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_kNo
expertsNo
questionYes
synthesizeNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes the process: routing, hybrid retrieval, reranking, and citation format. Mentions the 'synthesize' option for a grounded answer. No annotations provided, but the description covers the behavior adequately without contradicting any metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with an introductory paragraph and a clear parameter list. No unnecessary fluff, but could be slightly more concise. The instruction to cite sources is important and placed appropriately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters, no annotations, and no output schema, the description provides complete context: how the question is processed, what the output contains (passages with citations, optional synthesized answer), and how to use the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters are explained with meaningful descriptions beyond the schema (which has 0% description coverage). 'question' is clearly natural-language, 'top_k' has default, 'experts' explains optional forcing, 'synthesize' explains its effect.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool retrieves answers from domain experts using hybrid retrieval and reranking. Differentiates from siblings ('get_source' retrieves a specific source, 'list_experts' lists experts) by focusing on question answering with citations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage instruction to cite sources, but does not explicitly contrast with sibling tools or state when not to use. Implicitly guides that questions should be natural-language and experts can be forced or auto-routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sourceB

Fetch metadata about a cited source (to expand or verify a citation).

ParametersJSON Schema
NameRequiredDescriptionDefault
source_idYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries full burden. It does not explicitly state that the operation is read-only, nor does it mention any side effects, authentication, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, front-loaded sentence with no wasted words, though it could be more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite low complexity, the description lacks parameter explanation and behavioral details, making it incomplete for confident usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description does not mention the source_id parameter at all, leaving its meaning and usage entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch') and resource ('metadata about a cited source'), clearly distinguishing from sibling tools like ask_experts and list_experts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context ('to expand or verify a citation') but lacks explicit when-not-to-use or alternatives, though sibling differentiation is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_expertsA

List the available domain experts and how much each one knows.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It correctly states it lists experts and their knowledge levels, but does not disclose any potential side effects, rate limits, or access restrictions. For a simple read-only operation, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no redundant words. It is front-loaded and efficiently communicates the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there are no parameters and an output schema exists (as indicated by context signals), the description provides enough information for an agent to understand the tool's function. It could mention that it returns all experts or the output format, but the current description is sufficient for a simple listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters (0 parameters, schema coverage 100% via empty schema). The description does not need to add parameter details. Baseline for zero parameters is 4, and the description meets that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource 'available domain experts', and specifies what information is provided ('how much each one knows'). It distinguishes itself from sibling tools 'ask_experts' (which likely queries experts) and 'get_source' (which retrieves a source).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like 'ask_experts' or 'get_source'. The description implies it's for listing experts before asking, but does not provide direct usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation5/5

Each tool serves a distinct purpose: asking questions, fetching source metadata, and listing experts. There is no functional overlap among the three.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (ask_experts, get_source, list_experts), making them predictable and easy to understand.

Tool Count5/5

Three tools is well-scoped for the server's domain of expert QA. Each tool is necessary and there are no extraneous or missing core functions.

Completeness4/5

The set covers the main workflow: querying experts, verifying sources, and discovering available experts. A minor gap is the lack of a tool to get detailed expert profiles, but it's not essential for typical use.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/tiennt235/moe'

If you have feedback or need assistance with the MCP directory API, please join our Discord server