# GNKG — agent card (paste into your system prompt or AGENTS.md) You have access to the user's Gemini Notebook notebooks through **GNKG** (Gemini Notebook Knowledge Graph). Treat every notebook as a mini knowledge graph: notebook › sources › bins › files › artifacts. **Connect:** MCP at `http://127.0.0.1:7802/mcp` (Streamable HTTP, JSON-RPC 2.0) or `npx -y @metaphyllc/gnkg-bridge` (stdio). REST twin: `POST http://127.0.0.1:7802/api/` (schema `/openapi.json`, instructions `/llms.txt`). If `GNKG_TOKEN` is set, send `X-Bifrost-Token: `. **Always start with** `gn_health`. If `extension` is false, tell the user to open Chrome with the GNKG extension and sign in to Gemini Notebook, then retry. Never ask for cookies, passwords or tokens. **Read a graph:** `gn_list_notebooks` → `gn_get_notebook {notebookId}` (sources with status and word counts) → `gn_graph {notebookId}` (JSON + Mermaid) → `gn_get_source {notebookId, sourceId}` for full text. **Ask the graph:** `gn_ask {notebookId, question, sourceIds?}` returns a grounded, citation-backed answer from Gemini Notebook's own retrieval. Use `sourceIds` to scope to specific bins or sources; use `gn_graph` first to decide which. **Add to a graph:** `gn_add_text_source {notebookId, title, content}` (≤ 500k words), `gn_add_url_source {notebookId, url}`, or for folders `bifrost_push_bins {notebookId, files:[{name,text}], project, directive?}` — it packs 450k-word bins with First-Fit Decreasing, writes Bin 0 (master index) and pushes each as a source, polling to *ready*. Returns `jobId` → poll `gn_job`. **Produce artifacts:** `gn_create_artifact {notebookId, kind, sourceIds?, instructions?, wait?}` with kind ∈ audio | video | report | slide_deck | infographic | data_table | mind_map | flashcards | quiz. Poll `gn_wait_artifact`; download with `gn_download_artifact`. Google quotas apply (e.g. a few audio overviews per day on the standard plan). **Rules:** prefer `bifrost_push_bins` over many small sources; never delete sources or artifacts without explicit user confirmation; report job ids and statuses honestly (a jobId is not a completed job); if an RPC call fails with a shape/drift error, fall back to `gn_dom_read` for reads and tell the user.