npm tugrastdioApache-2.0updated 9d ago
That 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.
What can you do with Tugra?
tugra
npx tugra init
That 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.
Tools
| Tool | What it does |
|---|---|
fact_search |
Search the vault. Retired/rotten omitted unless archive: true. |
fact_read |
Read one fact by uid. Body is escaped before the model sees it. |
fact_propose |
Write a draft. Secret patterns are rejected before any write. type: "boundary" is always quarantined. |
event_report |
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.
Install
Add Tugra to your client. Pick the one you use.
claude mcp add tugra -- npx -y tugracodex mcp add tugra -- npx -y tugraamp mcp add tugra -- npx -y tugra{
"mcpServers": {
"tugra": {
"command": "npx",
"args": [
"-y",
"tugra"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"tugra": {
"command": "npx",
"args": [
"-y",
"tugra"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"tugra","command":"npx","args":["-y","tugra"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"tugra": {
"command": "npx",
"args": [
"-y",
"tugra"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"tugra": {
"command": "npx",
"args": [
"-y",
"tugra"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"tugra": {
"command": "npx",
"args": [
"-y",
"tugra"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"tugra": {
"type": "local",
"command": "npx",
"args": [
"-y",
"tugra"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"tugra": {
"command": {
"path": "npx",
"args": [
"-y",
"tugra"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y tugraRun `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
4 tools
Tugra exposes 4 tools to a connected agent.
- fact_search
- Search the vault. Retired/rotten omitted unless `archive: true`.
- fact_read
- Read one fact by `uid`. Body is escaped before the model sees it.
- fact_propose
- Write a draft. Secret patterns are rejected before any write. `type: "boundary"` is always quarantined.
- event_report
- Append a local telemetry line. No network.
Score
75 / 100
Good
- Documentation25/25
- Maintenance19/25
- Trust13/20
- Capability6/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 1 days ago
- Has a release history
- Repository is not archived
- Licensed Apache-2.0
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 4 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 0.1.1Latest | Aug 30, 2026 |