OKF Wiki MCP Server
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., "@OKF Wiki MCP ServerShow me the page on data governance"
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.
OKF Wiki — MCP App
A living knowledge base served as an MCP App: the wiki renders as an interactive UI inside any MCP Apps host, the model reads and expands it through tools, and every interaction — a slider explored, an insight saved, a rule distilled — leaves the wiki smarter than it found it.
The content is an OKF wiki (Organizational Knowledge Framework): a directory of markdown nodes with YAML frontmatter that binds playbook text to UI behavior. The wiki directory is a runtime input — the server re-reads it on every tool call, so ingested or hand-edited nodes are live immediately, with no rebuild or restart.
Origin: this combines two earlier experiments — the Level 2/3 generative-UI architecture from gen-ui-wiki-playground and the MCP Apps plumbing (single-file UI, host shim, runtime design tokens) from mcp-apps-demo-engine.
The three levels of generative UI, MCP Apps edition
Level | What it means | How this app does it |
1 — Static | Readable playbook text | Markdown rendered client-side ( |
2 — Adaptive parameters | UI controls generated from data | Sliders from frontmatter |
3 — Generative components | Bespoke per-node UI created at runtime | Ingest stores a self-contained |
The Level 3 translation is the interesting constraint: an MCP App is one sandboxed single-file resource — no dev server, no JSX compilation, no network. So a widget's source form is self-contained HTML (markup + inline style + inline script, no imports, no external requests).
Related MCP server: knowledgebased
The compounded-learning loop
explore sliders → save finding → distill into rule → sliders teach the next reader
↑ │
└──────────── gaps panel recommends what to explore ─────┘Findings write back. An insight discovered at the sliders is one click from permanent: it lands in the node's frontmatter with date + settings provenance and renders for every future reader.
Findings become rules. Level 2 heuristics are data, not code: nodes carry declarative
rules(whenslider-settings match → outcomes + note; most specific rule wins). A "Distill findings into rules" button asks the model to promote insights viarecord_rule— validated against the node's actual variable space so unfireable rules are rejected.The wiki detects its own gaps — ranks and explains them. Dangling relations, unported widgets, unexplored variable sets, and unlinked nodes are scored by leverage (a gap on a node referenced by 2 others outranks a leaf) and rendered as expandable cards: what the topic covers, why it matters, the specifics, and what closing it will do. Every card has a ready-to-send prompt behind an "Ask assistant" button.
Growth is visible.
wiki/log.mdrecords every ingest, update, finding, rule, and link, rendered as a "How this wiki grew" timeline.The chat knows what you're looking at. The app pushes compact state (current node, slider settings, outcomes, findings/rules counts) via
ui/update-model-contexton navigation and slider moves.
Tools
Tool | Callable by | Purpose |
| model (renders UI) | Overview of all nodes + gaps + timeline; optionally opens a node by id |
| app only | Sidebar navigation via |
| model | Add/update a playbook: classifies type, extracts variables/metrics, installs an |
| model + app | Persist an insight with the slider settings it was observed under |
| model + app | Add a declarative Level 2 heuristic ( |
| model + app | Add a typed relation between nodes |
All tool results include a plain-text/markdown fallback, so UI-less hosts still get useful answers.
Quick start (local, no host required)
npm install && npm run build
npm run serve:http # Terminal 1: MCP server on :3001
npm run shim # Terminal 2: reference host on :4180
# open http://localhost:4180/host-shim.htmlThe ~100-line shim does what a real host does — fetches the UI via resources/read, completes the MCP Apps handshake, proxies tool calls — and logs every message the app sends upward, including the context-sync and hand-back traffic.
For development with UI rebuild-on-change: npm run dev.
Connect to a real MCP Apps host
Streamable HTTP (server on http://localhost:3001/mcp):
npm run serve:http
# e.g. Claude Code:
claude mcp add --transport http okf-wiki http://localhost:3001/mcpstdio:
{
"mcpServers": {
"okf-wiki": {
"command": "node",
"args": ["/path/to/okf-wiki-mcp-app/dist/main.js", "--stdio"]
}
}
}Then ask the host's assistant to "open the wiki" — the open_wiki tool renders the app.
Bring your own wiki
The bundled wiki/ is demo content. To serve a different (e.g. live, generated) wiki, point WIKI_ROOT at any directory with this layout:
my-wiki-root/
├── wiki/ # the OKF nodes (*.md) + log.md ← required
├── raw/ # source documents (ingest writes here)
└── widgets/ # Level 3 widgets, <widgetId>.htmlWIKI_ROOT=/path/to/my-wiki-root npm run serve:httpEverything the app writes (findings, rules, relations, ingests, log) goes to that directory, so a git-tracked wiki gets reviewable diffs of what the assistant and users learned. PORT overrides the HTTP port (default 3001).
OKF node format
One markdown file per node in wiki/, YAML frontmatter + playbook body:
---
type: pattern-analysis # concept | pattern-analysis | sector-deepdive
subtype: tactical # pattern-analysis only: strategic | tactical
id: my-node-id # unique slug; must match how others relate to it
title: "Human-Readable Title"
created: "2026-07-10"
source_files:
- "raw/my-node-id.md"
variables: # optional → Level 2 sliders
task_complexity: [Low, Medium, High]
metrics: # optional → baseline outcome cards
efficiency_gain: "Shown when no rule matches"
rules: # optional → declarative Level 2 heuristics
- when: { task_complexity: High }
outcomes:
efficiency_gain: { value: "12% (escalation overhead)", status: warning }
note: "High complexity needs human escalation."
- when: {} # empty when = baseline rule
outcomes:
efficiency_gain: { value: "34%", status: success }
findings: # accumulated insights (written by the app)
- date: "2026-07-10"
text: "High complexity erodes the efficiency gain."
settings: { task_complexity: High }
relations: # typed edges to other node ids
- type: depends-on
id: some-other-node-id
widgetId: Widget_my_node_id # optional → widgets/Widget_my_node_id.html
---
# Human-Readable Title
Playbook markdown here…Notes:
Rules match when all
whenentries equal the current slider values; the most specific matching rule (most entries) wins.statusissuccess | warning | danger.Widgets (
widgets/<widgetId>.html) must be self-contained: markup + inline<style>+ inline<script>, no imports, no external requests. They render in a sandboxed iframe that receives the app's CSS custom properties (--color-accent,--color-background-primary, …), so use those with fallbacks for automatic theming.wiki/log.mdlines have the form## [YYYY-MM-DD] action | ID: node-id | Title: …— the app appendsingest,update,finding,rule, andlinkentries and renders them as the growth timeline.wiki/index.mdandwiki/log.mdare not treated as nodes.
Ingesting via the model
Ask the connected assistant to call ingest_document with a markdown document. It will classify the type, extract Level 2 variables from - **Name**: A / B / C bullet lines, and install a Level 3 widget from a fenced ```html block. Legacy ```jsx blocks are skipped with a note — this runtime cannot compile JSX.
Styling
DESIGN.md (design.md spec) is a runtime input like the wiki: its tokens compile to a CSS-variable override block injected into the served UI resource on every resources/read. Swap the file (samples in designs/), re-render, new brand — no rebuild. Host-provided style variables still win.
Repo layout
server.ts MCP tools + UI resource registration (DESIGN.md injection)
main.ts transport bootstrap (Streamable HTTP / stdio)
wiki.ts wiki store: parsing, gaps, timeline, ingest, findings/rules/links
design.ts DESIGN.md → CSS variables compiler
mcp-app.html app shell
src/mcp-app.ts the single-file wiki browser (Vite + vite-plugin-singlefile)
src/*.css app styles on host/design-token CSS variables
tools/host-shim.html minimal reference host for local testing
wiki/ raw/ widgets/ demo OKF content (replaceable via WIKI_ROOT)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.
Latest Blog Posts
- 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/SwePalm/okf-wiki-mcp-app'
If you have feedback or need assistance with the MCP directory API, please join our Discord server