tugra
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., "@tugrasearch the vault for facts about Kubernetes with their sources and ages"
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.
tugra
npx tugra initThat creates a vault, writes a sample fact, and prints a config block. Paste the block into your MCP client. On a TTY, npx tugra prints help and exits. Piped (Claude Desktop, Cursor, Claude Code) it is the MCP server.
Provenance-aware memory for AI agents. Every claim carries its source, its age, and its boundary. There is no cloud.
What it is
A fact that cannot name where it came from is not a fact. Tugra stores each claim as a file whose frontmatter holds source, last verification date, shelf life, and — when the topic is off-limits — a boundary that forbids invention. Search ranks by token score, then freshness, then confidence. Retired and rotten facts stay out of the default set.
Related MCP server: AgentBase
Tools
Tool | What it does |
| Search the vault. Retired/rotten omitted unless |
| Read one fact by |
| Write a draft. Secret patterns are rejected before any write. |
| Append a local telemetry line. No network. |
Stored field names stay in the vault's native shape (kaynak, guven, raf_omru, sinir). The tool names and parameter names above are the public contract.
Install — env paths (optional)
tugra init is enough to start. Override the two paths only if you already have a vault elsewhere. Without them, the server looks next to the installed package — that is wrong for a bare npx with no init.
TUGRA_KASA— vault (markdown facts)TUGRA_AKIS— telemetry directory
Authorization: if no authorization store is configured, single-user mode is on — search and propose work without a profile. If an authorization store is configured (a yetki/ directory, or TUGRA_YETKI), each agent needs a JSON profile or search returns unauthorized.
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"tugra": {
"command": "npx",
"args": ["-y", "tugra"],
"env": {
"TUGRA_KASA": "/absolute/path/to/vault",
"TUGRA_AKIS": "/absolute/path/to/events"
}
}
}
}Claude Code
.mcp.json at the project root, or claude mcp add:
{
"mcpServers": {
"tugra": {
"command": "npx",
"args": ["-y", "tugra"],
"env": {
"TUGRA_KASA": "/absolute/path/to/vault",
"TUGRA_AKIS": "/absolute/path/to/events"
}
}
}
}Cursor
.cursor/mcp.json or Cursor Settings → MCP:
{
"mcpServers": {
"tugra": {
"command": "npx",
"args": ["-y", "tugra"],
"env": {
"TUGRA_KASA": "/absolute/path/to/vault",
"TUGRA_AKIS": "/absolute/path/to/events"
}
}
}
}Windsurf
mcp_config.json:
{
"mcpServers": {
"tugra": {
"command": "npx",
"args": ["-y", "tugra"],
"env": {
"TUGRA_KASA": "/absolute/path/to/vault",
"TUGRA_AKIS": "/absolute/path/to/events"
}
}
}
}Codex
~/.codex/config.toml:
[mcp_servers.tugra]
command = "npx"
args = ["-y", "tugra"]
[mcp_servers.tugra.env]
TUGRA_KASA = "/absolute/path/to/vault"
TUGRA_AKIS = "/absolute/path/to/events"Windows: use a full path (C:\\Users\\…\\vault). Node 20 or newer.
More client notes: docs/install.md.
Shared-vault authorization (optional)
Single-user setups do not need this. Add TUGRA_YETKI only when several agents share one vault and each needs its own profile (mcp-readonly@tugra and others as JSON files in that directory). A missing profile then returns unauthorized. An empty TUGRA_YETKI is treated as unset — single-user mode stays on.
Host library surface (not the MCP wire)
The MCP tools (fact_search, fact_read, fact_propose, event_report) enforce authorization on every call. The published package also ships dist-paket/akis.js and dist-paket/yetki.js so a host application (cron, mirror, cockpit) can write telemetry without going through JSON-RPC.
Those modules are public on purpose. akisBildir({ atlaYetki: true }), eylem: "yetki_talebi", and dosyaYoksaIzin (default true) skip or relax the check. harcamaEkle mutates a profile. The host that imports them owns authorization. The MCP wire cannot set these flags — the tool schema does not accept them.
Scale vault vs target vault
A0–A5 levels are facts (yonetisim.yetki.a0 … a5) in a vault. The stdio server reads them from TUGRA_KASA, or from the cockpit kasa/ when that variable is unset.
tugraArac / createTugraMcp take an optional kasaKok (the write/search target). Scale does not follow that target. It defaults to varsayilanKasa() — the same central vault the stdio server uses. A host that points kasaKok at a data-only tree keeps using the cockpit / TUGRA_KASA scale. To read scale from a different tree, pass skalaKasa explicitly.
All four tools share one resolver. This is the contract: separate target + central governance stays reachable. YAYIN/12 briefly defaulted scale to kasaKok; that broke the split-root host. YAYIN/13 restores the central default.
What we do not guarantee
No cloud sync. The vault is the files you pointed at. Nothing is uploaded.
No automatic merge. Two writers, two files. You reconcile.
No delete in this release. Retirement exists; erasure is later.
No automatic conflict detection. Contradictory facts can sit side by side until a human says otherwise.
No hosted service.
npx tugrais a local stdio process.
This package is not published as a SaaS. There is no price table here.
Requirements
Node.js 20 or newer. This is a support decision, not a technical floor: the package is tested on 20 and 22 in CI, and it also runs on 18 — but 18 is past its end of life, so we do not support it.
A vault directory you own
Topic map (optional)
<vault>/_konu-haritasi.json — { "desen", "bayrak", "konu" } rules in
harita, alt_kirilim, and stem. If the file is missing the map is empty:
unknown text falls back to kurum.genel or dunya.<world>.genel. Broken or
over-long patterns are skipped and logged. This package does not ship a
company taxonomy.
License
Apache-2.0. See LICENSE and NOTICE.
The marketing page lives in ../site/ (npm run preview there). It is not deployed from this package.
Compatibility: TALAMUS_* and MULTI_* names still work as fallback if TUGRA_* is unset.
Available Tools
4 toolsevent_reportB
Append a telemetry line to akis/YYYY-MM-DD.jsonl. No network.
| Name | Required | Description | Default |
|---|---|---|---|
| job | Yes | ||
| note | No | ||
| agent | Yes | ||
| world | No | ||
| action | Yes | ||
| status | Yes | ||
| blocked | No | ||
| touched | No | ||
| confidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses that the operation is an append (non-destructive), writes to a dated local file, and is network-free ('No network.'). However, it does not explain return values, error behavior, file creation, or whether appends are atomic, which are relevant for a mutation tool with no annotation support.
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 description is two short sentences with no filler. The primary action and destination are front-loaded, and the extra 'No network.' sentence adds distinct behavioral value without redundancy.
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?
Given the tool has nine parameters, no annotations, no output schema, and 0% schema description coverage, this minimal description is not enough. An agent would still be uncertain about required field semantics, how to construct a valid telemetry line, and what happens after the append.
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 0%, so the description must compensate, but it does not explain any of the nine parameters. The phrase 'telemetry line' provides only a general context; the agent still gets no help understanding fields like 'blocked,' 'touched,' or 'confidence' beyond their names and enums.
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 uses a specific verb and resource: 'Append a telemetry line to akis/YYYY-MM-DD.jsonl.' This clearly distinguishes the tool from the fact-oriented siblings (fact_search, fact_read, fact_propose) by indicating it is for telemetry recording, not fact operations.
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?
The description gives no explicit guidance on when to use this tool versus the sibling tools. It does not state that this is for reporting events as opposed to reading facts, nor does it mention conditions, exclusions, or alternatives. Usage must be inferred entirely from the tool name and the word 'telemetry.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fact_proposeA
Write a draft fact under kasa/_oneriler/ (or quarantine). Secret patterns are rejected before any write; the matching text is never returned. type=boundary is always quarantined. Fake mcp:// sources are not injected.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| type | No | stored as tur; boundary is always quarantined | |
| agent | Yes | authorization agent id | |
| title | Yes | ||
| topic | No | ||
| world | No | ||
| source | No | real evidence; if omitted, kaynak is written empty — mcp:// is not injected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden and does well: it discloses that secret patterns are rejected before any write, matching text is never returned, type=boundary is always quarantined, and fake mcp:// sources are not injected. These are non-obvious behaviors an agent could not infer from the schema or tool name. Some gaps remain around authentication failures and persistence guarantees, but the most important safety behavior is covered.
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 dense, information-bearing sentences with the operation front-loaded and constraints following. There is no filler, repetition of schema fields, or unnecessary background. Every sentence adds either operational meaning or safety-critical context.
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 7-parameter mutation tool with no annotations and no output schema, the description covers the most critical write-path safety rules and destination details. However, it omits usage-selection guidance, return behavior, and the meaning of several optional fields, leaving the agent somewhat undersupplied for a fully confident invocation.
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 only 43%, so the description must compensate. It adds meaningful context for type (boundary is always quarantined) and source (real evidence only, no mcp:// injection), but title, body, topic, world, and agent semantics are left mostly to inference. This is partial compensation, not full coverage of the parameter space.
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: 'Write a draft fact under kasa/_oneriler/ (or quarantine)'. This clearly distinguishes the tool from siblings fact_search, fact_read, and event_report, which are read/search/report operations. The write operation and destination path leave no ambiguity about what the tool does.
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?
The description implies the tool is for writing facts by using the verb 'Write', but it never explicitly says when to prefer this over fact_search, fact_read, or event_report, nor when not to use it. It provides behavioral constraints rather than selection criteria, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fact_readA
Read one fact by uid. Body passes through the presentation layer (injection escaping). Retired facts include superseded_by and the reason.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| agent | No | authorization agent id (default mcp-readonly@tugra) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does add useful context about body escaping and retired-fact fields, which is beyond the bare 'read' meaning. However, it omits behavior for missing facts, errors, authorization requirements, or response shape.
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, with the core action front-loaded and no wasted words. The behavioral note about escaping and retired facts earns its place.
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 single-fact read tool, the description covers key lookup semantics and a special retired-fact case. But with no output schema and no annotation, it does not describe what happens when the uid is invalid or the result is empty, and it fails to mention when to choose fact_search instead.
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 50%: agent is documented but uid is not. The description adds some meaning by indicating the uid identifies the fact to read, but it does not elaborate on uid format or the agent parameter beyond what the schema already says.
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 clear verb and resource: 'Read one fact by uid.' It identifies the exact lookup method (by uid), which distinguishes it from fact_search, though it does not explicitly name siblings or contrast them.
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?
The description implies the tool is used when you have a fact's uid, but provides no explicit guidance on when to prefer fact_search or the other siblings. It does not state alternatives or exclusions, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fact_searchB
Search stored facts. Retired and rotten facts are omitted unless archive is true. Rank: token score, then freshness, then confidence. Boundary facts add a no-claim warning. Authorization required.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | authorization agent id (default mcp-readonly@tugra) | |
| limit | No | ||
| query | Yes | search text | |
| scope | No | evrensel | kurum | dunya (stored scope values) | |
| world | No | world id when scope is dunya | |
| archive | No | include retired and rotten facts; default is the active set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does a good job: it discloses default filtering of retired/rotten facts, the archive override, ranking order, and a special warning for boundary facts. It stops short of describing return structure or pagination, but the stated behaviors are genuinely informative.
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 description is terse and front-loaded with the core purpose. Each sentence contributes meaningful information, and there is no filler. Minor ambiguity in 'boundary facts' and the lack of an explicit response overview keep it from a perfect score.
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?
Given six parameters, no output schema, and no annotations, the description covers the key behaviors but leaves gaps: 'boundary facts' is undefined, authorization requirements are vague, and the meaning of scope values is only partially addressed. It is workable but not fully complete for a standalone definition.
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 high (83%), so the baseline is 3. The description adds context for archive behavior and ranking, but most parameter semantics are already present in the schema. It does not explain limit defaults or query matching semantics beyond what the schema provides.
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 opens with 'Search stored facts,' clearly identifying a specific verb and resource. It also adds scope details like archive filtering and ranking, which help distinguish it from reading a single fact or proposing a new fact, though it does not explicitly name sibling tools.
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?
The description implies the tool is used when searching facts, but it provides no explicit guidance on when to prefer fact_search over fact_read or other siblings. It mentions 'Authorization required' as a prerequisite but gives no exclusions or alternative-selection cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct operation: searching facts, reading by UID, proposing a draft fact, and appending telemetry. There is no meaningful overlap between fact_search, fact_read, fact_propose, and event_report.
All tool names use lowercase snake_case and an object-first pattern (fact_search, fact_read, fact_propose, event_report). Although event_report lacks the fact_ prefix, it follows the same noun-verb shape, making the naming predictable and consistent.
Four tools is a well-scoped surface for a fact-store server: two retrieval paths, one proposal/write path, and one telemetry path. Each tool earns its place without redundancy or bloat.
The search/read/propose set covers the main fact consumption and contribution workflows. Direct lifecycle operations such as update, retire, or approve are absent, but the proposal mechanism and archive flag suggest a curated interface where this is an acceptable minor gap.
Maintenance
Related MCP Connectors
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Persistent memory for AI agents — log and recall conversation context over MCP.
Shared memory for all your AI agents, your whole team and every MCP client — save, search, recall.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceProvides AI agents with persistent knowledge storage, enabling them to store, search, and retrieve text, documents, and files using semantic and keyword search via MCP tools.32Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to persistently store and semantically search shared knowledge via MCP tools.2MIT

CarpeOS MCP Serverofficial
AlicenseNot gradedqualityAmaintenanceEnables AI agents to capture, search, and manage structured memory from agent sessions with append-only events and provenance tracking, providing eight local MCP stdio tools.Apache 2.0- AlicenseNot gradedqualityAmaintenanceA bi-temporal, provenance-carrying memory primitive for AI agents. Enables storing facts, recall, revision, and audit trails via MCP with SQLite storage.6Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/dogrucanemek-alt/tugra'
If you have feedback or need assistance with the MCP directory API, please join our Discord server