Kika

io.github.amitok2Published by GitHub account amitok2v0.2.3Updated Oct 1, 2026

Shared memory for client engagements: decisions with reasons, blockers, promises, what was tried.

VerifiedStreamable HTTPWeb executableProductivity & WorkflowKnowledge & Memory

Overview

AI-generated overview

Kika is a shared project memory server that lets an assistant read and record decisions, blockers, promises and discarded attempts for a client engagement.

What you can do
  • Read the project's memory: get a session brief and search what was decided, blocked, promised or already tried.
  • Add to the memory: record new facts, update existing ones and close out open loops.
  • Capture turns automatically: a companion hook records what a finished turn settled without the agent calling a tool.
  • Review and undo: a web trail lists every turn the hook saw and lets you remove agent-written entries.
When to use it
Useful for teams and agents working on the same repository or client engagement who need context that is not in the code, such as why a decision was made, what is blocked, or what was promised and by when. Also relevant when several people and agents should share one memory of a project.
Requirements
A remote endpoint at api.getkika.app over streamable HTTP, plus a Kika account. Sign-in is by browser OAuth, or by a bearer token passed in an Authorization header for CI or machines without a browser. The automatic capture hook ships as a Claude Code plugin; on Linux and Windows the token-header form is recommended.
Before you install
The capture hook sends the last assistant message and your last typed message, the working directory, the git remote URL and the session id to Kika. Once per project it also uploads up to 12 committed markdown files and the subjects and dates of the last 60 commits. It stores a capture-only key in a local file; that key can be revoked on the Kika site. Everyone on a project can read and write its memory, and recorded entries are marked agent-written and unverified.

Installation

In SourceWeft

  1. Open Kika in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.amitok2%2Fkika/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "kika": {
      "type": "http",
      "url": "https://api.getkika.app/mcp"
    }
  }
}

README

Kika for Claude Code

Kika gives a project one memory that every agent and every person on it reads. What was decided and why, what is blocked, what was promised and by when, what was already tried and dropped. None of that is in the repository, and an agent cannot infer it from the code.

[What the agent sees at session start: the engagement's blockers, decisions with their reasons, risks, and what is no longer true — then a reply that cites the fact it used]

One install gives you both halves:

  • the MCP server — get_brief, search_memory, remember, update_memory, close_loop, so an agent can read the project's memory and add to it; and
  • the capture hook — which records what a turn settled without the agent having to remember to.

The hook is the part no other memory product has. A handshake that says "write things down when they matter" is advice, and a model under load ignores advice. A hook is not advice.

Install

/plugin marketplace add usekika/kika-plugin/plugin install kika@kika

Then /mcp, choose kika, and approve in the browser.

That is the whole install. The plugin carries both halves, so there is nothing to clone, no script to run, and no second credential: the hook reads the OAuth token Claude Code already holds for this server and keeps refreshed.

Projects create themselves the first time something worth remembering is said in a repository. There is nothing to set up per project.

With a token instead

For CI, or a machine with no browser. Get one at getkika.app/app/connect:

claude mcp add --scope user --transport http kika https://api.getkika.app/mcp \  --header "Authorization: Bearer kika_mcp_…"

--scope user matters: without it the server is bound to the one project you happened to be in. The hook reads that same header out of your MCP configuration, so it is still one credential.

Platform note

The OAuth path is verified on macOS, where Claude Code keeps the token in the login keychain. Elsewhere the hook looks for ~/.claude/.credentials.json first, which may or may not be where your build stores it. If capture is silent on Linux or Windows, use the --header form above.

For a teammate

They install the same way and sign in as themselves. What they do in their own repositories is their own memory.

To put them on a project of yours, add them at getkika.app/app/projects — the project, then People, then the email address they sign in with. They do not need an account first; the invitation waits and is claimed the first time they sign in.

From then on their checkout of that repository resolves to your project rather than a second copy of it: what they decide, you read, and every fact shows who recorded it and from which branch. Everyone on a project can read and write its memory; only the owner decides who else is on it.

Until you add them, a repository that already belongs to a project is refused rather than duplicated. The agent is told the project exists, that they are not on it, and that whoever set it up can add them.

What leaves your machine

When a finished turn looks like it settled something, the hook posts to https://api.getkika.app/hooks/turn:

  • the last assistant message (at most 8,000 characters) and the last message you typed (at most 4,000), keeping the end of each rather than the beginning
  • the working directory, and git remote get-url origin for it
  • the Claude Code session id

It does not send your source code, your environment, or any other conversation. Most turns are discarded on your machine before any request is made at all.

Once per project, when Kika first creates the project for a repository, it asks for that repository's docs so the project starts with an overview rather than an empty page. The hook then posts to https://api.getkika.app/hooks/bootstrap:

  • up to 12 committed markdown files from the top two levels of the repository (README, CLAUDE.md, AGENTS.md, architecture docs first), at most 8,000 characters each. Only files git ls-files lists — never untracked files, never anything under a dot-directory
  • the subjects and dates of the last 60 commits (at most 4,000 characters)
  • the working directory, git remote and branch

This happens once per project and never again.

It reads a credential in one of four places, in this order: the Authorization header you configured on the MCP server, the OAuth access token Claude Code holds for this server (macOS keychain, or ~/.claude/.credentials.json), ~/.kika/token, or ~/.kika/hooks-key. It never reads a credential belonging to any other server.

~/.kika/hooks-key exists because an OAuth access token lasts an hour and only the agent renews it — so without it, capture stopped an hour into any session where the agent did not happen to call Kika. While your OAuth sign-in is fresh, the session-start hook asks for a capture-only key once per machine and saves it there, readable only by you. The server accepts that key on the hooks and refuses it on the MCP tools, so it cannot search or read your memory beyond the session brief, and it cannot mint another key. It is listed at getkika.app/app/connect as "capture only", and revoking it there works like any key. With none of them present, capture exits immediately and sends nothing.

What it does say: once a day, at the start of a session, if no credential is found or the server rejects the one it has, you see one line — "Kika is not signed in … nothing from this session will be remembered". Capture that is off should never look like capture with nothing to save. That check runs on your machine and sends nothing but the request it was going to make anyway.

The hook runs after your turn ends and never blocks it. It exits quietly in every path, including failure: a hook that interrupts you is a hook you disable.

Seeing and undoing what it saved

getkika.app/app/trail shows every turn the hook saw, including the ones it saved nothing from and why, and what each cost you.

Anything recorded this way is marked agent-written and unverified. It can never overwrite something from one of your meetings, it never reaches your meeting notes, and every entry is listed at getkika.app/app/activity with an Undo that removes it.

Turning it off

Remove the plugin. Removing only the MCP server (claude mcp remove kika) leaves the hooks installed with no token to find: nothing is sent, and the once-a-day "not signed in" line appears until the plugin is removed too.

Source: README.md at commit 2c8377a

Tools

0
SourceWeft has not read this server's tools yet.

Version history

2
  1. v0.2.3LatestSep 17, 2026
  2. v0.2.2Sep 17, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declaredRequired10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts