ObsidianKnowledgeCuratorBLOCK
Autonomous, modular knowledge lifecycle agent built on the Antigravity 2.0 SDK and Model Context Protocol (MCP) for deterministic Obsidian graph curation.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
An autonomous, agentic knowledge compiler designed to maintain and synthesize a "Second Brain" within an Obsidian Vault. Built natively with the Google Antigravity SDK and Gemini 3.1 Pro, this system automates the ingestion of technical articles, YouTube videos, and research papers, filtering content via an automated Technical Density Grader, indexing structural relationships via Graphify.net, and maintaining a decoupled skill-data architecture.
👋 For Non-Technical Readers
What this is. A personal automation system that turns a large, ever-growing pile of technical reading (articles, videos, podcasts, books) into a structured, searchable knowledge base — automatically. Instead of bookmarking content and never revisiting it, the system reads it, judges whether it's actually worth keeping, extracts the key ideas, cross-links them to everything already known, and flags contradictions as understanding evolves.
Who it's for. Built and maintained by one engineer for personal use — a working example of applying real software-engineering discipline (automated tests, architecture decision records, staged rollouts, health monitoring) to a personal productivity problem, not a commercial product or team tool.
Why it matters. It demonstrates hands-on experience with skills r
c37a26553cabOBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add obsidianknowledgecurator --env GEMINI_API_KEY=${GEMINI_API_KEY} --env GOOGLE_API_KEY=${GOOGLE_API_KEY} --env GRAPHIFY_DAEMON_API_KEY=${GRAPHIFY_DAEMON_API_KEY} -- uvx obsidianknowledgecurator{
"mcpServers": {
"obsidianknowledgecurator": {
"command": "uvx",
"args": [
"obsidianknowledgecurator"
],
"env": {
"GEMINI_API_KEY": "${GEMINI_API_KEY}",
"GOOGLE_API_KEY": "${GOOGLE_API_KEY}",
"GRAPHIFY_DAEMON_API_KEY": "${GRAPHIFY_DAEMON_API_KEY}"
}
}
}
}Exposed tools (27)
19 read · 8 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
audit_vault_health | read | Runs the vault health linter to detect dead wikilinks, orphan notes, and contradictions. |
clean_staging_temp | read | Safely cleans temporary staging files in temp/ directory. |
commit_curated_batch | write | Atomically writes multiple curated raw notes, series master plan, and concept notes to the vault, |
commit_curated_note | write | Atomically writes a curated source note to raw/ and concept notes to wiki/, |
explore_concept | read | Explores a concept in the knowledge graph, showing its summary/takeaways, source file, and direct relationships. |
fetch_article_data | read | Fetches article web page data with full DOM extraction, concurrent image preservation, and Graphify context mapping. |
fetch_book_data | read | Prepares non-fiction book data (PDF, EPUB, DOCX, TXT) using the HDAS ingestion engine. |
fetch_doc_data | read | Converts office documents, presentations, PDFs, spreadsheets, and EPUBs to markdown using AnyDoc. |
fetch_playlist_data | read | Fetches YouTube playlist structure, video metadata, and full transcripts in batch. |
fetch_podcast_data | read | Fetches podcast or audio link, downloads media, and transcribes with Whisper. |
fetch_spotify_data | read | Extracts synchronized transcript and metadata from a Spotify podcast episode using the Chrome DOM bridge. |
fetch_twitter_data | write | Fetches Twitter/X post text, metadata, and transcribes embedded video audio via Whisper. |
fetch_youtube_data | read | Fetches YouTube video metadata, downloads/transcribes transcript, and extracts Graphify thematic context. |
find_notes | read | Searches Obsidian vault notes by title/filename substring (case-insensitive) using SQLite index. |
inspect_flashcards_deck | read | Inspects format, columns, card count, and target deck for any study flashcard file silently without shell permissions. |
normalize_notes | read | Audits, deduplicates, archives stubs, and injects canonical Obsidian headers into notes in a category. |
run_doctor_audit | write | Runs OKC Doctor: comprehensive integrity audit, SQLite DB sync, Master Plans rebuild, ZWSP sanitizer, and Graphify rebuild. |
status_flashcards_deck | write | Inspects card count and Anki sync status for a multiple-choice flashcard deck. |
sync_basic_deck | write | Synchronizes a basic/reversed flashcard deck (TSV or Markdown) to Anki via AnkiConnect. |
sync_multi_choice_deck | write | Synchronizes a multiple-choice flashcard deck (Markdown or TSV) to Anki via AnkiConnect. |
sync_vault_plans | write | Synchronizes Master Plans and runs the vault health check for a given knowledge base category. |
validate_flashcards_deck | read | Audits a multiple-choice flashcard markdown file against the 6-dimension OKC rubric. |
yt_get_transcript | read | |
yt_list_transcripts | read | |
ytdlp_get_playlist | read | |
ytdlp_get_transcript | read | |
ytdlp_list_playlist_videos | read |
Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (6 observation(s))
- Network
- declared (12 observation(s))
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (12)
".env" ... curl
print(f"[Direct Fetch Warning] SSL or connection error: {err}. Retrying with verify=False...", file=sys.stderr)resp = session.get(url, headers=headers, timeout=15, verify=False, allow_redirects=True)
resp = requests.get(url, headers=headers, timeout=12, verify=False)
Do not attempt to bypass safety controls. Optimization consists in **correctly reusing a legitimate operation**, not evading required authorizations.
GRAPHIFY_DAEMON_URL="http://127.0.0.1:8787"
GRAPHIFY_DAEMON_URL="http://127.0.0.1:8787"
ANKI_CONNECT_URL="http://127.0.0.1:8765"
.env.template
- **Direct Anki MCP & AnkiConnect Push**: Automatically creates decks, uploads media assets, and synchronizes cards via the Anki MCP server or local AnkiConnect HTTP API (`http://127.0.0.1:8765`).
"http://127.0.0.1",
curl -LsSf https://astral.sh/uv/install.sh | sh
Gates applied: instruction_override, no_behavioural_pass.
c37a26553cabfull audit observations/trust-audit/mcp-server/c-ibarra__obsidianknowledgecurator.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | c37a26553cab | BLOCK | D | 69 | first audit |
Questions
What is the ObsidianKnowledgeCurator MCP server?
Autonomous, modular knowledge lifecycle agent built on the Antigravity 2.0 SDK and Model Context Protocol (MCP) for deterministic Obsidian graph curation.
What tools does ObsidianKnowledgeCurator expose?
27 in total: 19 read-only, 8 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is ObsidianKnowledgeCurator safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (69/100) and found 5 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does ObsidianKnowledgeCurator need?
It reads GEMINI_API_KEY, GOOGLE_API_KEY and GRAPHIFY_DAEMON_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does ObsidianKnowledgeCurator run?
It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as obsidianknowledgecurator.
How current is this page?
The grade is for one exact copy of the source (c37a26553cab), read on 2026-10-11. The repository is watched and re-audited when it changes.