polymnemo MCP server
Commit 27 Okt 2026Menyediakan memori jangka panjang bersama untuk berbagai LLM menggunakan semantic recall, manajemen sesi, dan penyimpanan multimedia melalui Postgres dan pgvector.
Juga dikenal sebagai PCBZ/polymnemo
- Stars
- 0
- Tools
- 2
- Unduhan, 30 hari
- —
- Versi terbaru
- 1.5.0
- Commit terakhir
- 27 Okt 2026
- Lisensi
- MIT
Apa itu polymnemo MCP?
polymnemo adalah MCP server. Menyediakan memori jangka panjang bersama untuk berbagai LLM menggunakan semantic recall, manajemen sesi, dan penyimpanan multimedia melalui Postgres dan pgvector. Server ini menyediakan 2 tool, seperti keyword, rrf.
Ringkasan dibuat dari README proyek
Tentang polymnemo MCP server
polymnemo menyediakan sistem memori jangka panjang bersama untuk berbagai LLM melalui Model Context Protocol. Dengan menghubungkan client MCP apa pun, seperti Claude Desktop atau IDE, ke satu endpoint tunggal, beberapa asisten dapat mengakses informasi tersimpan yang sama. Server ini menggunakan database Postgres dengan pgvector untuk mengelola semantic recall, yang memungkinkan pengguna menyimpan fakta, menyimpan seluruh transkrip percakapan, dan mengelola file multimedia seperti gambar atau video.
Server ini dirancang untuk privasi dan kontrol lokal. Proses embedding diproses secara lokal menggunakan ONNX, yang berarti tidak memerlukan API key embedding eksternal dan tidak ada panggilan generative LLM yang dilakukan oleh server. Pengguna dapat mengelola data melalui namespace, di mana namespace bersama dapat dibaca oleh semua orang sementara koleksi lainnya tetap privat bagi pemiliknya. Setup memerlukan connection string Postgres dan API key untuk bearer authentication, dan sistem ini dapat dideploy ke Azure Container Apps atau Google Cloud Run menggunakan Terraform.
Apa yang bisa Anda lakukan dengannya
- 1Berbagi pengetahuan antar asistenSeorang developer dapat menyimpan fakta spesifik dengan satu asisten AI dan kemudian memanggil kembali informasi yang sama persis saat menggunakan client LLM yang berbeda.
- 2Riwayat percakapan yang persistenAnda dapat menginstruksikan AI untuk menyimpan seluruh transkrip chat sehingga seluruh konteks dapat dimuat kembali pada sesi mendatang.
- 3Pengambilan informasi semantikClient AI dapat mencari melalui memori yang tersimpan menggunakan query berbasis makna, bukan sekadar kecocokan kata kunci yang eksak.
- 4Lampiran memori multimediaPengguna dapat melampirkan file, gambar, atau video ke memori mereka, menyimpan byte asli di object storage sambil tetap menyimpan deskripsi yang dapat dicari di vector database.
Ditulis berdasarkan README proyek. Setiap use case diperiksa terhadap kutipan dari README tersebut.
Cara menginstal polymnemo MCP
Format diverifikasi 10 Nov 2026Tambahkan ke CursorTambahkan ke GooseInstal polymnemo MCP di Claude Code
$ claude mcp add --transport http polymnemo https://polymnemo.purpleground-26f6d744.westus2.azurecontainerapps.io/mcpInstal polymnemo MCP di Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"polymnemo": {
"url": "https://polymnemo.purpleground-26f6d744.westus2.azurecontainerapps.io/mcp"
}
}
}Instal polymnemo MCP di VS Code
.vscode/mcp.json
{
"servers": {
"polymnemo": {
"type": "http",
"url": "https://polymnemo.purpleground-26f6d744.westus2.azurecontainerapps.io/mcp"
}
}
}Instal polymnemo MCP di VS Code CLI
$ code --add-mcp '{"name":"polymnemo","type":"http","url":"https://polymnemo.purpleground-26f6d744.westus2.azurecontainerapps.io/mcp"}'Instal polymnemo MCP di Codex
$ codex mcp add polymnemo --url https://polymnemo.purpleground-26f6d744.westus2.azurecontainerapps.io/mcpInstal polymnemo MCP di Codex config.toml
~/.codex/config.toml
[mcp_servers.polymnemo] url = "https://polymnemo.purpleground-26f6d744.westus2.azurecontainerapps.io/mcp"
Instal polymnemo MCP di Gemini CLI
$ gemini mcp add -s user --transport http polymnemo https://polymnemo.purpleground-26f6d744.westus2.azurecontainerapps.io/mcpInstal polymnemo MCP di Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"polymnemo": {
"url": "https://polymnemo.purpleground-26f6d744.westus2.azurecontainerapps.io/mcp",
"type": "http"
}
}
}Tool polymnemo MCP 2
Terdeteksi dari READMEkeywordrrf
| keyword | — | |
| rrf | — |
Konfigurasi
POLYMNEMO_API_KEYSPOLYMNEMO_DATABASE_URL
| Nama | Deskripsi | Tipe |
|---|---|---|
| POLYMNEMO_API_KEYS | — | |
| POLYMNEMO_DATABASE_URL | — |
Pengecekan otomatis
Berjalan 14 Nov 2026Laporan lengkap →Belum diverifikasi. Sebuah server memerlukan skor 80, tidak ada temuan serius, dan data yang cukup untuk kami periksa. Cara kerja checks · Yang perlu diperbaiki untuk menambah poin
- Source repository terhubung dan dapat dijangkaupcbz/polymnemo is public and reachablegithub.com/pcbz/polymnemo ↗Lolos
- Nama paket mencantumkan repositori ini sebagai sumbernyaTidak diperiksa
- Provenance build (atestasi Sigstore)Tidak diperiksa
- Lisensi open source (OSI)MITspdx.org/licenses/MIT.html ↗Lolos
- Ada commit atau release dalam satu tahun terakhirLast commit or release 2026-10-28github.com/pcbz/polymnemo ↗Lolos
- OpenSSF ScorecardTidak diperiksa
- Nama package tidak mirip dengan package populerTidak diperiksa
- Tidak ada advisory kritis pada paket atau dependensinyaTidak diperiksa
- Tidak ada instruksi tersembunyi untuk model2 tool descriptions and the README read; no override phrases, credential paths or hidden charactersLolos
- Tools yang bersifat destruktif telah diberi labelNo tool named like delete, drop or execLolos
- Endpoint remote merespons handshake MCPHTTPS endpoint answered 401 (sign-in required)Lolos
README
Lihat di GitHubpolymnemo
A shared long-term memory across any LLM, over MCP.
Point Claude Desktop, an MCP-capable IDE, or any MCP client at one polymnemo endpoint and they share the same memories — stored in your own Postgres. Store a fact with one assistant, recall it from another; save whole sessions and reload them; even attach files, images, or video. Embeddings run locally (no embedding API key), and the server makes no generative-LLM calls.
Status: active development. Semantic memory + pgvector store, session save/reload, and multimedia memories all work; deployable to Azure Container Apps (or Cloud Run) via Terraform. Wiki · Issues
Features
- 🔗 Cross-LLM shared — point any MCP client at one endpoint; they share the same memory.
- 🧠 Semantic recall — vector search over Postgres + pgvector by default, with exact-text and fused (RRF) modes when you need to find an ID or a name.
- 💬 Sessions — save a full transcript and reload it verbatim, or recall across it.
- 🖼️ Multimedia — attach files, images, or video; bytes go to object storage, only a searchable description is embedded.
- 🔒 Local & private — embeddings run locally (ONNX): no embedding API key, and no generative-LLM calls, ever.
- 👥 Namespaces — "born-shared" collections readable by everyone, vs. private-to-owner; writes are always owner-scoped.
- 🧩 Pluggable layers — store, embedder, auth, retriever, blob store, and rate limiter are all swappable
Protocols. - ☁️ Multi-cloud deploy — one Terraform stack to Azure Container Apps or Cloud Run, scale-to-zero.
- 🚦 Rate limiting — optional global token bucket.
How it works
flowchart LR
Clients["MCP clients<br/>(Claude Desktop, IDEs, …)"] -->|"/mcp · Bearer key"| P["polymnemo<br/>(MCP server)"]
P --> DB[("Postgres + pgvector<br/>text + pointers")]
P -. "large files<br/>(presigned URLs)" .-> OS[("Object storage<br/>S3 / R2")]
A request carries a bearer key (which resolves to a user_id); the tool passes
the rate-limit gate, then delegates to a MemoryService that chunks + embeds
text and stores the vectors in pgvector — large files go to object storage via
presigned URLs, with only a searchable description embedded.
Every layer is a typing.Protocol, wired together by a composition root
(context.py), so you can swap an implementation
without touching the tools:
| Layer | Default | Swap for |
|---|---|---|
| Store | PostgresStore (pgvector) |
InMemoryStore (dev/tests) |
| Embedder | fastembed (local ONNX) |
StubEmbedder (offline) |
| Auth | GitHub OAuth + API tokens | static bearer keys (dev) |
| Retriever | VectorRetriever |
your own ranker |
| BlobStore | S3 / R2 | off |
| RateLimiter | global token bucket | off |
The ping tool returns the active layers, so you can see how a running server is
wired.
Quickstart
Requires Python 3.11+.
1. Install
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e . # add ".[dev]" for the test + lint tooling
2. Provision Postgres (pgvector)
The durable store is Postgres + pgvector; the easiest hosted option is Neon (use the pooled connection string). Apply the schema once:
psql "<your-connection-string>" -f scripts/schema.sql
3. Configure
Copy .env.example to .env and set the database URL and at least one API key:
POLYMNEMO_DATABASE_URL=postgresql://user:pass@host/db?sslmode=require
POLYMNEMO_API_KEYS=sk-alice-secret:alice,sk-bob-secret:bob # "key:user_id" pairs
Each key maps a bearer token to a user_id; writes are scoped to that user.
4. Run
polymnemo # Streamable HTTP at http://127.0.0.1:8000/mcp
Or with Docker:
docker build -t polymnemo .
docker run -e POLYMNEMO_DATABASE_URL="..." -e POLYMNEMO_API_KEYS="sk-alice-secret:alice" \
-e PORT=8080 -p 8080:8080 polymnemo
5. Connect an MCP client
Any client that supports remote (HTTP) MCP servers with custom headers needs two things:
- Endpoint:
http://<host>:<port>/mcp - Header:
Authorization: Bearer <your-key>
For clients that read an mcpServers config:
{
"mcpServers": {
"polymnemo": {
"url": "http://127.0.0.1:8000/mcp",
"headers": { "Authorization": "Bearer sk-alice-secret" }
}
}
}
Or verify with the inspector:
npx @modelcontextprotocol/inspector
# Transport: Streamable HTTP · URL: http://127.0.0.1:8000/mcp
# Header: Authorization: Bearer sk-alice-secret → call ping / remember / recall
Concepts
- Users & keys — sign in with GitHub, or present a bearer token. Either way
the request resolves to a
user_id, and writes are owner-scoped (you can only edit or delete your own memories). - Headless clients — CI, cron jobs and server-side agents can't complete a
browser sign-in, so they use an API token instead. Sign in with GitHub at
<server>/tokensto create, list and revoke them; a new token is shown once and stored only as a SHA-256 hash. Deliberately not MCP tools — a secret must never travel an LLM channel. - Namespaces — memories live in namespaces. A shared namespace (default
shared) is readable by everyone ("born shared"); everything else is private to its owner. Sessions and media default to private namespaces. - Chunking — long content is split into chunks on write (one vector each), so
remembermay return several ids andrecallreturns the closest chunks. - Secret scanning — optional, and off unless you turn it on: set
POLYMNEMO_RSP_CONFIGto a scanner config (the image ships one at/app/plugins/rsp.toml). Unset, every write goes through a no-op guard and nothing is scanned. When on, the text of a memory is scanned before it is embedded or stored, so a refused write was never written rather than deleted afterwards. It coversremember,save_session,updateand a media memory's description. The contents of uploaded files are not scanned and are stored as you sent them: the bytes go straight to object storage under a presigned URL and never pass through this server. A file's description is scanned; the file is not.
Tools
polymnemo exposes MCP tools for storing, searching, and managing memories:
- Memory —
remember,recall,list_memories,get_memory,update,forget
recall takes a mode:
| mode | finds | good for | not for |
|---|---|---|---|
similarity (default) |
by meaning, across languages | "what do I know about coffee?" | exact IDs, names, error strings |
keyword |
rows containing every word, case-insensitively | order 88312, a project codename, an error message |
synonyms; may return fewer than limit or nothing |
rrf |
both, fused by rank | when you are unsure which kind of query it is | — |
keyword is an exact substring match. rrf fuses the top 50 candidates from each
leg, so paging through it reaches at most about 100 results.
score is only comparable within one mode, and total is the size of the
namespace searched, not the number of matches.
- Sessions —
save_session,load_session - Media —
create_upload,confirm_upload,get_download_url
Plus a ping health check and a memory://{namespace} resource for
auto-injecting a collection. Media bytes go to object storage via presigned URLs
— never through the MCP channel — with only a searchable description embedded
(needs the blob extra).
Full arguments and return shapes live in the dedicated MCP tools reference (coming soon). See Concepts for how keys, namespaces, and chunking work.
Configuration
POLYMNEMO_* environment variables (or .env) — full list in
.env.example. The essentials:
| Variable | Default | Purpose |
|---|---|---|
POLYMNEMO_DATABASE_URL |
(unset) | Postgres+pgvector DSN. Required in production; unset → in-memory (dev/tests). |
POLYMNEMO_API_KEYS |
(empty) | "key1:alice,key2:bob" — required for bearer auth. |
POLYMNEMO_SHARED_NAMESPACES |
shared |
Namespaces readable by every user. |
POLYMNEMO_HOST / POLYMNEMO_PORT / POLYMNEMO_MCP_PATH |
127.0.0.1 / 8000 / /mcp |
Transport. |
POLYMNEMO_RATELIMIT_ENABLED / _PER_MIN |
false / 600 |
Optional global rate limit (ops per minute). |
POLYMNEMO_BLOB_BACKEND (+ _BUCKET / _ENDPOINT_URL / _ACCESS_KEY_ID / _SECRET_ACCESS_KEY) |
none |
Object storage for media memories; s3 = Cloudflare R2 / S3-compatible. |
POLYMNEMO_RSP_CONFIG |
(unset) | Path to a scanner config; unset means no scanning. The image ships one at /app/plugins/rsp.toml. |
Development
pip install -e ".[dev]"
pytest # fast, offline (stub embedder, in-memory store)
ruff check . && ruff format --check . # lint + format (enforced in CI)
Postgres tests run when TEST_DATABASE_URL points at a pgvector Postgres. CI
(.github/workflows/ci.yml) runs lint + the suite with coverage and posts a
pass/fail/coverage table to each run's summary.
Deploy
polymnemo is stateless (all state in Neon + object storage), so it runs on
Azure Container Apps (primary) or Google Cloud Run with scale-to-zero.
Everything is Terraform in deploy/terraform/: shared
neon/ (Postgres) and r2/
(media bucket) roots own the durable state, and a compute root deploys a service
that reads both — so memories and media are shared across clouds.
The Azure path deploys from CI in one click: set the GitHub secrets
(scripts/setup-github-secrets.sh), bootstrap the state backend
(scripts/bootstrap-tfstate-azure.sh), then run the deploy (azure) workflow
(neon → schema → r2 → build → app). GCP is a manual failover. Full walkthrough
in docs/deploy.md.
License
MIT — see LICENSE.
Pertanyaan tentang polymnemo MCP
Bagaimana cara menambahkan polymnemo MCP ke Claude Code?
Jalankan claude mcp add --transport http polymnemo https://polymnemo.purpleground-26f6d744.westus2.azurecontainerapps.io/mcp di terminal Anda. Tambahkan --scope user agar tersedia di semua proyek.
Bagaimana cara menambahkan polymnemo MCP ke Cursor?
Buka ~/.cursor/mcp.json dan tambahkan server di bawah mcpServers, menggunakan config Cursor yang ditunjukkan di bagian instalasi di atas.
Tool apa yang disediakan polymnemo MCP?
Server ini menyediakan 2 tool, termasuk keyword, rrf.
Apakah server ini melakukan panggilan ke generative LLM?
Tidak, server ini tidak melakukan panggilan generative-LLM dan proses embedding berjalan secara lokal menggunakan ONNX.
Bagaimana cara saya berbagi memori di antara berbagai asisten AI yang berbeda?
Anda dapat mengarahkan client berbasis MCP apa pun ke satu endpoint polymnemo untuk berbagi memori yang sama yang tersimpan di database Postgres Anda.
Bisakah saya menyimpan gambar atau video di dalam memori?
Ya, Anda dapat melampirkan file, gambar, atau video; byte aslinya akan dikirim ke object storage sementara deskripsi yang dapat dicari akan di-embed.
Mode pencarian apa saja yang tersedia untuk memanggil kembali memori?
Server ini mendukung similarity search untuk makna, keyword search untuk substring yang eksak, dan RRF (Reciprocal Rank Fusion) untuk menggabungkan keduanya.