openviking-mcp
You can use this server to read and retrieve OpenViking knowledge from any MCP-capable agent, with no write or capture capabilities.
Semantic search (
ov_search): find documents by meaning, with optional subtree, result limit, and score threshold.Read documents (
ov_read): fetch the full L2 text of one document by itsviking://URI.Browse directories (
ov_overview): inspect OpenViking directory structure with generated L0/L1 summaries.Read-only operation: all tools are annotated read-only and idempotent; there are no add, edit, delete, or memory-capture tools.
stdio MCP integration: works with DSH, Claude Code, Codex, Cursor, and similar MCP clients.
Click on "Deploy 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., "@openviking-mcpsearch my knowledge base for docs on partition filters"
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.
openviking-mcp
Minimal read-only MCP server that exposes OpenViking knowledge retrieval to any MCP-capable agent (DSH, Claude Code, Codex, Cursor, …).
Why this exists
OpenViking ships an official DSH plugin that adds automatic session capture and context injection. This project deliberately does none of that:
Read-only. There is no tool that can add, edit or delete OpenViking content. An agent cannot promote conversation into "knowledge" on its own.
No capture. Nothing is written back to the server by this process.
No bundled memory lifetime. Session capture, context injection and skill syncing stay opt-in and outside this server.
stdio only. Works with every MCP client; no HTTP listener to secure.
Use the official plugin if you want automatic memory. Use this if you want an agent that can look things up and nothing more.
Related MCP server: graphiti-folder
Tools
Tool | Purpose |
| Semantic search. Returns URI, score, level and summary for each hit. |
| Read one document's full text (L2) by |
| Browse a directory with its generated abstracts (L0/L1). |
All three are annotated read-only and idempotent.
Install
Install straight from this repository — no npm release required, npm clones and packs it for you:
npm install -g github:SophiaData/openviking-mcpPin a released version instead of tracking master:
npm install -g github:SophiaData/openviking-mcp#v0.1.0Upgrade or remove later:
npm install -g github:SophiaData/openviking-mcp # re-run to upgrade
npm uninstall -g openviking-mcpOr run from a checkout without installing anything globally:
git clone https://github.com/SophiaData/openviking-mcp.git
node openviking-mcp/src/server.mjsConfigure
Environment only — nothing is read from or written to a config file:
Variable | Default | Meaning |
|
| OpenViking server base URL |
| (empty) | Sent as |
|
| Per-request timeout |
Client registration
DSH
Add to the profile patch ($DSH_HOME/profiles/<profile>/cordis.patch.yml):
- insert:
- id: openviking-knowledge
name: "@deepseek-ai/dsh-mcp-client"
config:
serverName: "openviking"
transport: "stdio"
command: "node"
args: [ "E:/dev-day/openviking-mcp/src/server.mjs" ]
env:
OPENVIKING_URL: "http://127.0.0.1:1933"
failOnStartupError: falseClaude Code
claude mcp add openviking --scope user -- node /path/to/openviking-mcp/src/server.mjsCodex
# ~/.codex/config.toml
[mcp_servers.openviking]
command = "node"
args = ["/path/to/openviking-mcp/src/server.mjs"]
env = { OPENVIKING_URL = "http://127.0.0.1:1933" }Verify
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
'{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"ov_search","arguments":{"query":"partition filter"}}}' \
| node src/server.mjsYou should see three tool definitions and a search result block. If the server is down, the tool returns an explicit error instead of an empty list.
Limitations
Read-only by design; write tools are intentionally absent.
Requires a running OpenViking server with imported resources. An empty store returns "No results".
ov_readreturns at most 20,000 characters; use OpenViking's own pagination for longer documents.Tested against OpenViking 0.5.2.
License
MIT
Available Tools
3 toolsov_overviewARead-onlyIdempotent
Inspect OpenViking directory structure with generated summaries (L0/L1). Use it to survey what knowledge exists before deciding what to search or read.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | Directory URI, defaults to the resources root. | |
| depth | No | How many levels to show. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds the useful detail that results come with pre-generated L0/L1 summaries, but says nothing about response volume, how deep/broad output scales, or what L0 vs L1 means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero redundancy: the capability comes first, then the usage guidance. Nothing is padded or restated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter read-only survey tool with full annotation coverage and no output schema, the description is nearly sufficient. The one gap is the undefined L0/L1 jargon, which is the tool's main value proposition and would help an agent judge whether the summaries suffice before calling ov_read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear docs for uri (defaults to resources root) and depth (1-4 levels), so the description needs to add little. It adds nothing beyond the schema and leaves the unexplained L0/L1 notation as the only domain-specific concept, which is not tied to any parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Inspect OpenViking directory structure") plus the distinguishing output trait ("generated summaries (L0/L1)"). It separates itself from ov_search and ov_read by framing itself as the survey step before those actions, though it never names the siblings directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it to survey what knowledge exists before deciding what to search or read" gives a clear situational trigger and implicitly positions ov_search/ov_read as the follow-on alternatives. It stops short of explicit when-not conditions or naming the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ov_readARead-onlyIdempotent
Read the full text of one OpenViking document by URI (L2 content). Use it after ov_search when a hit looks relevant and you need the complete section.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | A viking:// URI returned by ov_search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful scope details, namely full L2 content for a single document, but does not describe error behavior, authorization needs, rate limits, or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is two tight sentences with no wasted language. The core operation is front-loaded, and the second sentence supplies usage context efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with complete schema coverage and rich safety annotations, the description supplies enough context: what is returned, at what granularity, and when to call it. Minor gaps around error behavior and exact return format remain, but they are not critical here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains that uri is a viking:// URI returned by ov_search. The description reinforces that access is by URI but adds no syntax or format detail beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: read the full text of one OpenViking document by URI, and it scopes the content as L2. It differentiates the tool from ov_search by positioning it as the next step after a search hit, though it does not explicitly distinguish it from ov_overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage guidance: call this after ov_search when a hit looks relevant and the complete section is needed. It does not specify when not to use it or how it compares to ov_overview as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ov_searchARead-onlyIdempotent
Search the OpenViking knowledge base by meaning. Returns matching documents with their URI, relevance score and a short summary. Use it before writing SQL, DDL or node changes to check for existing standards and known pitfalls.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results. | |
| query | Yes | What to look for, in natural language. | |
| target_uri | No | Optional subtree to search, e.g. viking://resources/knowledge. Empty searches everything. | |
| score_threshold | No | Optional minimum relevance score. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely new behavioral context: the matching is semantic ('by meaning') rather than keyword, and it discloses the shape of results. It omits anything about result-set behavior when nothing matches, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with capability, then return shape, then the usage rule. No sentence is redundant or restates the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by naming the three returned fields. Four parameters and no nested objects makes this a simple tool, and the only thing an agent might still want — what happens on zero matches — is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, limit, target_uri and score_threshold are all documented in the schema itself, including the subtree URI example. The description adds nothing parameter-specific beyond the vocabulary overlap of 'URI' and 'relevance score' in the return statement, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — semantic search over the OpenViking knowledge base — plus the return shape (URI, relevance score, summary). It does not explicitly contrast itself with siblings ov_read and ov_overview, though the names plus 'search by meaning' make the distinction reasonably inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it before writing SQL, DDL or node changes to check for existing standards and known pitfalls' gives a concrete triggering context, which is stronger than most. It stops short of explicit when-not conditions or naming ov_read/ov_overview as the alternatives for retrieval once a URI is known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
ov_overview - First observed
ov_read - First observed
ov_search
TDQS
Scored across 3 tools
The three tools are clearly separated by purpose: ov_overview surveys structure, ov_search finds relevant documents semantically, and ov_read retrieves full text by URI. Their descriptions explicitly describe a progression, leaving little chance of misselection.
All tools use the same ov_ prefix followed by a concise action-oriented suffix: search, read, overview. The naming is predictable and easy to scan.
Three tools are well-scoped for a read-only knowledge-base MCP. Each operation covers a distinct stage of discovery and retrieval without redundant surface area.
The set covers the full retrieval lifecycle: survey available knowledge, search by meaning, then read full content. No obvious read-side gaps exist, and write operations are not implied by the server's purpose.
Maintenance
Related MCP Connectors
Read-only MCP server exposing a user ORANO library to their own AI agent.
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Search MCP servers, MCP clients and AI agents, and retrieve listing details. Free, read-only access.
Read-only MCP server for the OrchestKit docs: full-text search + Markdown fetch. No auth.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server that exposes one or more documentation folders (Markdown, MDX, TXT) to AI agents, enabling listing, reading, and searching of documentation files.-
- AlicenseAqualityDmaintenanceA read-only MCP server that lets you search current and historical facts from a time-indexed knowledge graph derived from a folder of Markdown/text documents, with verification against original sources. It exposes tools for status, fact search, history search, and revision lookup while keeping document insertion and modification to the CLI.3MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for a content-first knowledge base, enabling AI agents to search (full-text, semantic, hybrid) and retrieve Markdown documents, list content, and find related docs.0MIT
- FlicenseAqualityBmaintenanceA read-only MCP server that enables AI clients to search a knowledge base and retrieve complete source documents via narrow search and fetch tools.2-