{"id":50422859,"url":"https://github.com/rblez/memlink","last_synced_at":"2026-05-31T09:04:05.501Z","repository":{"id":359474307,"uuid":"1245967946","full_name":"rblez/memlink","owner":"rblez","description":"Memlink is a self-hosted MCP (Model Context Protocol) server that gives AI agents persistent, organized memory. One memory, one URL, any agent connects.  No tokens. No headers. No OAuth. Just the URL.","archived":false,"fork":false,"pushed_at":"2026-05-30T06:12:56.000Z","size":672,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-30T08:05:14.611Z","etag":null,"topics":["agents","ai","cli","mcp","memory"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rblez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-21T18:34:34.000Z","updated_at":"2026-05-30T06:12:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rblez/memlink","commit_stats":null,"previous_names":["rblez/memlink"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/rblez/memlink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblez%2Fmemlink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblez%2Fmemlink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblez%2Fmemlink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblez%2Fmemlink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rblez","download_url":"https://codeload.github.com/rblez/memlink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblez%2Fmemlink/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33725060,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","ai","cli","mcp","memory"],"created_at":"2026-05-31T09:04:03.935Z","updated_at":"2026-05-31T09:04:05.494Z","avatar_url":"https://github.com/rblez.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/rblez/memlink/main/public/memlink.png\" alt=\"Memlink Logo\" width=\"200\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eMemlink\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eUniversal Memory for AI Agents\u003c/strong\u003e\u003cbr/\u003e\n  Self-hosted · Fast · Organized\n\u003c/p\u003e\n\n---\n\nMemlink is a self-hosted MCP (Model Context Protocol) server that gives AI agents persistent, organized memory. One memory, one URL, any agent connects.\n\n## Installation\n\n[![npm](https://img.shields.io/badge/npm-CB3837?style=for-the-badge\u0026logo=npm\u0026logoColor=white)](#npm)\n[![pnpm](https://img.shields.io/badge/pnpm-F69220?style=for-the-badge\u0026logo=pnpm\u0026logoColor=white)](#pnpm)\n[![yarn](https://img.shields.io/badge/yarn-2C8EBB?style=for-the-badge\u0026logo=yarn\u0026logoColor=white)](#yarn)\n[![bun](https://img.shields.io/badge/bun-000000?style=for-the-badge\u0026logo=bun\u0026logoColor=white)](#bun)\n\n### npm\n\n```bash\nnpm install -g @memlink/cli\n```\n\n### pnpm\n\n```bash\npnpm install -g @memlink/cli\n```\n\n### Yarn\n\n```bash\nyarn global add @memlink/cli\n```\n\n### bun\n\n```bash\nbun install -g @memlink/cli\n```\n\n### From source\n\n```bash\ngit clone https://github.com/rblez/memlink.git\ncd memlink\nbun install\nnpm run build\n```\n\n## Quick Start\n\n```bash\nmemlink                              # Show system overview\nmemlink init my-project              # Create a memory\nmemlink serve                        # Start MCP server\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `memlink` | System overview: server, memories, entries, size |\n| `memlink init \u003cname\u003e` | Create a memory (alias: `create`). `--serve` auto-start server |\n| `memlink delete \u003cname\\|id\u003e` | Permanently delete a memory |\n| `memlink ls` | List all memories (name, ID, size) |\n| `memlink show \u003cname\\|id\u003e` | Show full memory as Markdown + export to formats |\n| `memlink serve` | Start MCP server. `--port`, `--host`, `--cors`, `--read-only`, `--daemon`, `--transport`, `--memory`, `--watch` |\n| `memlink stop` | Stop the daemon server |\n| `memlink status` | Check daemon server status |\n| `memlink connect \u003cname\\|id\u003e` | Show MCP config JSON + agent setup instructions |\n| `memlink info \u003cname\\|id\u003e` | Show memory details (name, ID, URL, stats) |\n| `memlink export \u003cname\\|id\u003e` | Export memory to configured formats (md/txt/html/json) |\n| `memlink import \u003cname\\|id\u003e \u003cfile\u003e` | Import entries from a JSON file |\n| `memlink config` | View or modify config (`get`, `set`) |\n| `memlink skill` | Install agent skill. `--global` or `-g` for all projects |\n| `memlink bug` | Open GitHub issue with pre-filled template |\n| `memlink changelog` | Open changelog in browser (`localhost:4444/changelogs`) |\n\n## Documentation\n\nFull documentation in [/docs](/docs):\n\n| Document | Description |\n|----------|-------------|\n| [Installation](/docs/installation.md) | npm, pnpm, yarn, bun, from source |\n| [Quick Start](/docs/quickstart.md) | Get running in 2 minutes |\n| [CLI Reference](/docs/cli.md) | All commands and flags |\n| [MCP Server](/docs/server.md) | Server configuration, auth, transports |\n| [MCP Tools](/docs/mcp-tools.md) | All MCP tool details |\n| [Agent Setup](/docs/agent-setup.md) | Connect Claude, Cursor, Windsurf, etc. |\n| [Skill](/docs/skill.md) | Agent skill installation |\n| [Backups](/docs/backups.md) | Backup and restore |\n| [Architecture](/docs/architecture.md) | How it works |\n\n### Global flags\n\n| Flag | Description |\n|------|-------------|\n| `-v, --version` | Show version with runtime info |\n| `-h, --help` | Show help with examples and env vars |\n\n## Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `MEMLINK_DIR` | Data directory | `~/.memlink` |\n| `MEMLINK_PORT` / `PORT` | Server port | `4444` |\n| `MEMLINK_HOST` / `HOST` | Server host | `localhost` |\n\n## Architecture\n\n```\n~/.memlink/\n├── settings.json              # Global config (memories, port, host)\n├── .serve.pid                 # Daemon PID (hidden)\n│\n└── test-memory/               # Per-memory directory\n    ├── .lock                  # Write lock (hidden)\n    ├── index.json             # Index (titles only, no content)\n    ├── 1.json                 # Entry 1\n    ├── 2.json                 # Entry 2\n    │\n    └── .backups/              # Auto-backups on every write\n        └── 1_1717112345.json\n```\n\nAgents connect via MCP:\n\n```\nhttp://localhost:4444/mcp?id=MEMORY_ID\n```\n\n## MCP Tools\n\n| Tool | Description | Params |\n|------|-------------|--------|\n| `memory_read` | Read index or specific entry | `id?`, `title?`, `full?` |\n| `memory_edit` | Create or update an entry | `title`, `content`, `tags?` |\n| `memory_search` | Search by query | `query` |\n| `memory_sync` | Memory stats | — |\n\n## Robustness\n\n- **Atomic writes**: files written to `.tmp` then renamed — no corruption on crash\n- **Auto-backups**: every edit creates a backup in `.backups/`\n- **File lock**: concurrent writes serialized via `.lock` with 10s TTL + retry\n- **TTY detection**: ASCII art and clipboard disabled in non-TTY (CI, Docker, pipes)\n- **Safe clipboard**: clipboard failures handled silently\n\n## Development\n\n```bash\nbun install              # Install deps\nnpm run build            # Build + type check\nnpm run dev:server       # Server with hot reload\nnpm run dev:cli          # CLI dev mode\nnpm run test             # Run tests\nnpm run lint             # ESLint\nnpm run format           # Prettier\n```\n\n## Project Structure\n\n```\nsrc/\n├── cli/index.ts       # CLI entrypoint (commands)\n├── cli/output.ts      # Output formatting, colors, branding, skill template\n├── server/index.ts    # MCP server (Express + @modelcontextprotocol/sdk)\n├── server/changelogs.ts  # Changelog HTML renderer\n├── core/\n│   ├── storage.ts     # Index+N.json CRUD, auto-backups, migration (new)\n│   ├── lock.ts        # .lock with TTL + withLock helper (new)\n│   ├── memory.ts      # Legacy CRUD, CLI helpers, config\n│   └── types.ts       # Types, constants, getMemlinkDir\ntests/\n├── memory.test.ts     # Core memory unit tests\n├── server.test.ts     # MCP server integration tests\n└── unit.test.ts       # Additional unit tests\n```\n\n## CI/CD\n\n```\nbun test → bun run build → bun run format:check → bun run lint\n```\n\nReleases trigger on `v*` tags via PRs to `main` from `beta`. Publish manually: `npm publish --access public`.\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frblez%2Fmemlink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frblez%2Fmemlink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frblez%2Fmemlink/lists"}