knownbase
Knownbase gives AI agents durable, structured project memory that persists across sessions, tools, and workflows.
What it can do
- Get Context: START HERE for project work. Returns this project's current state in one call: its summary and agent instructions, active constraints, canonical decisions, current status, open items, not
- Remember: Store a durable fact, decision, constraint or discovery WITHOUT having to reason about note storage. Give it the content and (ideally) a type; it derives the title, checks the project for ne
- List Projects: List workspace project categories and note counts.
What data it sees
Do you need an account
No: the server works without sign-in
Knownbase gives AI agents durable, structured project memory that persists across sessions, tools, and workflows.
Through MCP, agents can store and retrieve Markdown-based knowledge such as architecture decisions, debugging discoveries, implementation details, handoffs, project facts, and ongoing work. Notes can be organized by project, tags, status, and structured metadata, then searched efficiently using full-text queries and incremental last-modified filtering.
Knownbase goes beyond basic memory storage with note revision history, linked notes and backlinks, batch retrieval, optimistic concurrency control, soft deletion, project-scoped access, workspace-level permissions, and project export and backup capabilities. Its lean retrieval model also lets agents search first and fetch full note bodies only when needed, reducing unnecessary context usage.
The result is a reliable shared memory layer for MCP-compatible AI agents, allowing them to resume work with the right project context instead of repeatedly reconstructing decisions and discoveries from previous conversations.
How to connect
How to connect knownbase to Claude
The server address to paste into Claude settings:
https://knownbase--zeeshan-zstech.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect knownbase to ChatGPT
The server address to paste into ChatGPT settings:
https://knownbase--zeeshan-zstech.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect knownbase to Cursor
The server address to paste into Cursor settings:
https://knownbase--zeeshan-zstech.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (16)
Raw names from tools/list. Only developers need these.
| get_context | START HERE for project work. Returns this project's current state in one call: its summary and agent instructions, active constraints, canonical decisions, current status, open items, notes relevant to your query, what changed recently, and any unresolved conflicts — ranked, deduplicated, and packed to a token budget so it fits your context window. Superseded and historical claims are excluded by default, so what you get back is what is true NOW, not everything that was ever true. Use this instead of a cold search_notes when you are starting a task, resuming work, or need to know what has already been decided. Follow up with get_note only for the specific entries whose excerpt is marked truncated. |
| remember | Store a durable fact, decision, constraint or discovery WITHOUT having to reason about note storage. Give it the content and (ideally) a type; it derives the title, checks the project for near-identical or contradicting memories, and tells you what it did. Returns status: 'created' (new), 'updated' (folded into an existing memory as a fuller restatement, previous text kept as a revision), 'duplicate' (already stored, nothing written), or 'conflict' (contradicts an existing decision/constraint/architecture — NOTHING was written and you must resolve it, either by re-calling with supersedes:[id] if the new claim replaces the old one, or force:true if both are genuinely true). Conflict detection is lexical and high-precision but low-recall: it only catches contradictions phrased with overlapping wording, so a 'created' result carrying reviewRequired:true means YOU must read the listed relatedNotes and decide whether one is now obsolete. Prefer this over upsert_note for durable knowledge; use upsert_note when you already know the note id you want to edit. Store decisions and their reasoning, non-obvious root causes, environment constraints, and approaches tried and rejected — not casual conversation, transient debugging output, or unconfirmed speculation. |
| list_projects | List workspace project categories and note counts. |
| search_notes | Search markdown notes by project, tag, status, full text query, or last-modified date. Results are lean by default (id/title/snippet/bodyBytes/etc., no full body) to save tokens — pass includeBody:true if you need full content inline, or call get_note/get_notes for the specific hits you actually want. Response includes total, hasMore (for pagination), and searchMode ('keyword' or 'semantic'). Pass semantic:true to search by meaning rather than exact keywords when the workspace's plan and deployment support it — it transparently falls back to keyword search otherwise (searchMode tells you which ran). Superseded and historical claims are excluded by default, the same as get_context, so results reflect what is true now; pass includeHistorical:true or an explicit memoryStatus to see them. |
| get_note | Read one markdown note by id, full body included. Response includes links (this note's resolved [[Title]] references) and backlinks (other notes that reference this one) so an agent can traverse related memory without a separate search. |
| get_notes | Read multiple notes by id (up to 50) in a single call, full bodies included (with links/backlinks, as get_note). Use this after a lean search_notes to fetch just the hits you want in one round trip instead of many get_note calls. |
| upsert_note | Create or update a markdown note. project and title are required when creating a new note (no id). When updating an existing note (id given), omitting body/tags/status/title/project leaves each unchanged — so you can safely update just one field (e.g. just tags) without resending the rest. IMPORTANT: omitting id ALWAYS creates a brand-new note, even if title exactly matches an existing note in the same project — it does not find-or-update by title. To update a note you already know about, look up its id first (search_notes/get_notes) and pass id; if you accidentally omit id on a title match, the response's duplicateOf field names the pre-existing note so you can fix it. A project-scoped API key may omit project entirely on a new note; it defaults to the key's own project. Pass expectedVersion for optimistic concurrency. Write [[Title]] in the body to link to another note in the workspace by its exact title (same project preferred, then anywhere) — the reference is resolved on save and shows up as that note's backlinks; an unresolved title is left as plain text, not an error. |
| delete_note | Move a note to trash by id (soft delete; restorable from the dashboard). |
| list_note_revisions | List the saved prior versions of a note (newest first). Lean by default (version/title/editedAt/bodyBytes, no body) — pass includeBody:true to inline full content for every revision, or use get_note_revision to fetch just one. |
| get_note_revision | Read the full body of one specific prior revision of a note. See list_note_revisions for the version list. |
| workspace_info | Show workspace plan, limits, usage, and this API key's own access (scope, and project restriction if any) — compact, no member list or API key metadata for other keys. |
| usage_summary | Show current workspace usage against plan limits and this API key's own access (scope, and project restriction if any) — compact, no member list or API key metadata for other keys. |
| rename_project | Bulk-rename a project across every note in the workspace (equivalently: move every note in one project to another). Not available to a project-scoped API key. Merges into 'to' if it already exists. |
| rename_tag | Bulk-rename (or remove) a tag across every note in the workspace in one call. Not available to a project-scoped API key. Pass an empty 'to' to remove the tag everywhere instead of renaming it. |
| backup_project | Export full note content (every field, no lean/snippet truncation) for one project, returned directly in the result — not written to any server-side location. Use this to snapshot/back up the project you're working on: persist the result wherever suits your own environment (a file, a repo commit, etc.). A project-scoped API key always gets its own project; an unscoped key must pass project explicitly. |
| backup_now | Reserved server-operator backup command. Tenant MCP credentials cannot run instance-wide filesystem backups; use backup_project to export a project you can access. |