Agentic Resource Discovery Server plugin for Obsidian

Canonical version: Agentic Resource Discovery Server plugin for Obsidian.

Obsidian community plugin that turns your vault into a local-first Agentic Resource Discovery (ARD) publisher and Agent Registry. It scans your AI Skills and your subagent definitions, builds a rich ai-catalog.json, and runs a localhost server so AI agents on your machine can discover and fetch exactly the skill or persona they need by natural-language search, without any of it leaving your computer.

Created by Sébastien Dubois. Licensed under MIT.

This one is for people who have piled up dozens or hundreds of AI Skills and MCP servers and don't want to load all of them into every agent's context window. Instead of registering everything everywhere, you publish them to a local catalog and let agents search it.

How It Works

  • Scans your skill folders (Anthropic Agent Skill format — SKILL.md plus frontmatter) at startup, without blocking Obsidian
  • Scans your subagent folders too (opt-in): one <name>.md per agent with frontmatter (name, description, tools, model) and the system prompt as body, the Claude Code .claude/agents/ shape. Each becomes an entry of type application/ai-agent+md under urn:air:<publisher>:subagents:<name>, so an agent can find "the editor" the way it finds a skill
  • Turns each skill and definition into a catalog entry: description, tags, capabilities, and synthesized example queries
  • Serves an ARD registry over http://127.0.0.1 with a required bearer token
  • Folders may live outside the vault — you point it at wherever your skills already are
  • isDesktopOnly: the plugin needs Node's HTTP server and filesystem access

Endpoints

  • GET /.well-known/ai-catalog.json — the public catalog (no auth)
  • POST /search — natural-language search, results ranked 0–100 by relevance (pageSize, or its alias limit, caps the result count)
  • GET /status — readiness: catalog size, active search backend, and whether semantic embeddings are built yet (a semantic backend answers lexical-only while its index builds)
  • GET /agents — deterministic, paginated listing
  • GET /skills/<name>/SKILL.md — fetch a skill's body and bundled assets directly
  • GET /subagents/<name>.md — fetch a subagent definition (frontmatter plus system prompt)
  • POST /mcp — Model Context Protocol (MCP) endpoint using the Code Mode pattern

MCP Code Mode

The MCP endpoint exposes search, get_resource (get_skill remains as an alias), and execute. search takes a filter.type to pick a family (application/ai-skill or application/ai-agent+md); get_resource returns an entry with its body, resolved by URN rather than by URL so an entry that merely looks local can never be answered with a local file. execute runs sandboxed JavaScript against the catalog, so an agent can filter and aggregate in a single call instead of round-tripping. The sandbox has no network or filesystem access.

Search Backends

  • Default: in-process BM25 index (MiniSearch). No model, no network, nothing to download.
  • Optional: point it at a local embedding server you already run (Ollama, LM Studio, …) for hybrid semantic search. Nothing is bundled or downloaded by the plugin, and it falls back to lexical search if the server is down.

Privacy & Security

  • Server binds to 127.0.0.1 only
  • Every endpoint except the public catalog requires a bearer token
  • Skill file serving is confined to your configured folders (path-traversal-safe); artifact bodies are re-checked against their scan root at serve time, so a symlink swapped in later is refused
  • Subagent folders are off until you add one: every listed definition's name, description and tool list becomes part of the public catalog (the prompt body stays behind the bearer token)
  • The execute sandbox has no network or filesystem access
  • No telemetry, no cloud

Status

1.2.1. The REST registry, skill and subagent scanning and enrichment, artifact serving, the MCP Code Mode endpoint, and optional semantic search all work and are covered by 380+ tests. Since 1.1.0, skills are found by their own quoted trigger phrases in lexical search; since 1.2.0, the plugin can keep its entry in the vault's .mcp.json in sync (port and token), so Claude Code connects without manual copying; since 1.2.1, /search pages through results with pageToken. Available in the official Obsidian community directory since 2026-09-23: https://community.obsidian.md/plugins/agentic-resource-discovery-server (install it from Settings → Community plugins, or from the GitHub release).

Quick Start

  1. Open the plugin settings
  2. Under Skill folders, add folders that contain skills (each skill is a subfolder with a SKILL.md); under Subagent folders, optionally add a folder of agent definitions (e.g. .claude/agents)
  3. Click Rescan now — the status line shows how many skills and subagents were indexed
  4. Copy the bearer token from the Server section
  5. Point an agent at the registry (default port 27182):
# Public catalog needs no auth:
curl http://127.0.0.1:27182/.well-known/ai-catalog.json

# Search needs the bearer token:
curl -X POST http://127.0.0.1:27182/search \
  -H "Authorization: Bearer <your-token>" \
  -H "Content-Type: application/json" \
  -d '{"query":{"text":"summarize a long note"}}'

To use it as an MCP server, point your MCP client at http://127.0.0.1:27182/mcp with the bearer token.

References

Using it from Claude Code without a skill catalog

With claude --disable-slash-commands --strict-mcp-config and only this registry as MCP server, a session boots at about half the tokens of one that preloads every skill description, and finds skills and personas through search / get_resource instead. See MCP Code Mode and the osk-meta-ard-discovery skill in the Obsidian Starter Kit.


About Sébastien

Ready to get to the next level?

Found this valuable? Share it with someone who needs it.

Join 6,000+ readers. Get practical systems for knowledge & AI. Free.

Subscribe ✨

Free: Knowledge System Checklist

A clear roadmap to building your own knowledge system. Subscribe and get it straight to your inbox.

6,000+ readers. No spam. Unsubscribe anytime.

Subscribe