{
  "markdown": "<div align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/AatirNadim/getMe/main/getme-landing/public/extended-logo-rounded.png\" alt=\"getMe Logo\" style=\"width: 400px; max-width: 100%;\"/>\n\n<br/>\n\n  <div><strong>A High-Performance Key-Value Store</strong></div>\n  <br/>\n\n[![Docker Image](https://img.shields.io/badge/Docker-Image-2496ED?logo=docker&logoColor=white&style=for-the-badge)](https://hub.docker.com/r/aatir0docking/getme)\n[![Go SDK](https://img.shields.io/badge/Go_SDK-Releases-00ADD8?logo=go&style=for-the-badge)](https://github.com/AatirNadim/getMe/releases?q=gosdk&expanded=true)\n[![Java SDK](https://img.shields.io/maven-central/v/io.github.aatirnadim/getme-javasdk?logo=apachemaven&logoColor=red&label=Java%20SDK&style=for-the-badge)](https://central.sonatype.com/artifact/io.github.aatirnadim/getme-javasdk)\n[![JS SDK](https://img.shields.io/npm/v/getme-js-sdk?logo=npm&logoColor=CB3837&label=JS%20SDK&style=for-the-badge)](https://www.npmjs.com/package/getme-js-sdk)\n[![Python SDK](https://img.shields.io/pypi/v/getme-python-sdk?logo=python&label=Python%20SDK&style=for-the-badge)](https://pypi.org/p/getme-python-sdk)\n[![MCP Server](https://img.shields.io/pypi/v/getme-mcp-server?logo=modelcontextprotocol&label=MCP%20Server&style=for-the-badge)](https://pypi.org/project/getme-mcp-server/)\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg?logo=gnu&style=for-the-badge)](https://www.gnu.org/licenses/agpl-3.0.html)\n\n</div>\n\n<!-- --- -->\n\n## 📑 Index\n\n- [Overview](#-overview)\n- [Project Structure](#-project-structure)\n- [Core Architecture](#-core-architecture)\n- [Getting Started](#-getting-started)\n  - [Running the Server](#running-the-server)\n  - [Using the CLI](#using-the-cli)\n  - [HTTP Proxy](#http-proxy)\n  - [MCP Server](#mcp-server)\n- [Running Benchmarks & Tests](#-running-benchmarks--tests)\n- [SDKs](#-sdks)\n- [License](#-license)\n\n<!-- --- -->\n\n## 📖 Overview\n\n`getMe` is a persistent, embeddable key-value store written in Go. It is inspired by the design of Bitcask and is optimized for high write throughput and low-latency reads.\n\nIt uses a log-structured storage approach, ensuring that all data is appended sequentially. It uses Unix Domain Sockets (UDS) for incredibly fast local inter-process communication, alongside several interfaces like an HTTP proxy, a CLI, and a Model Context Protocol (MCP) server for LLMs.\n\n<!-- --- -->\n\n## 🏗 Project Structure\n\nThis project is a monorepo containing the core storage server, multiple client interfaces, and tools.\n\n- **[`server/`](./server/)**: The core storage daemon and engine. Implements the log-structured hash table for persistent storage. See [`server/README.md`](./server/README.md) for architectural deep-dives.\n- **[`cli/`](./cli/)**: A command-line interface for interacting with the `getMe` server for testing and debugging.\n- **[`sdks/`](./sdks/)**: Client libraries (`goSdk`, `javaSdk`, `jsSdk`, `pythonSdk`) to integrate `getMe` into your applications.\n- **[`http-proxy-go/`](./http-proxy-go/)**: An HTTP server built using the `goSdk` that exposes the core engine's Unix Domain Socket connection over standard HTTP routes.\n- **[`mcp-server/`](./mcp-server/)**: A Model Context Protocol (MCP) server that exposes the `getMe` database as tools to Large Language Models (like Claude or Cursor).\n- **[`commons/`](./commons/)**: Shared code, socket paths, types, and constants used across the monorepo to ensure consistency.\n- **[`utils/`](./utils/)**: Shared utility packages, including logging stack configurations (Loki + Alloy + Grafana).\n\n> **Spotlight:** The curated inner docs are the quickest way to understand the system end-to-end. Start with [`server/README.md`](./server/README.md) for architecture fundamentals, then explore the `cli` and `mcp-server` modules for integrations.\n\n<!-- --- -->\n\n## 🧠 Core Architecture\n\nThe storage engine relies on a few core principles:\n\n- **Log-Structured Storage**: All data is written to an append-only log file. This makes writes extremely fast as it avoids slow, random disk I/O.\n- **In-Memory Hash Index**: A hash table is kept in memory, mapping each key to the exact location of its value on disk. This allows for very fast read operations (typically one disk seek).\n- **Compaction**: A background process that periodically cleans up old, stale data from the log files to reclaim disk space.\n- **Fast Local Transport**: Communication is done predominantly via Unix Domain Sockets, avoiding standard TCP overhead locally.\n\n<!-- --- -->\n\n## 🚀 Getting Started\n\n### Running the Server\n\nThe repository ships with helper scripts to bootstrap the environment.\n\n#### Option A: Local binaries + logging stack\n\nSwitch to the server module and run the local init script:\n\n```bash\ncd server\n./init-server-local.sh\n```\n\nThis script builds the Go binary into `server/dist/`, prepares data/log/socket directories, and starts the Loki + Alloy + Grafana logging stack via Docker Compose before launching the server in the foreground.\n\n> **Warning:** **Do not prefix this script with `sudo`**. It will invoke elevated privileges internally where needed. Using `sudo` at the top level causes permission errors for local development.\n\n#### Option B: Full Docker Compose stack\n\nFrom the same `server` directory run:\n\n```bash\ncd server\n./init-server-docker.sh\n```\n\nThis ensures host directories exist, exports your UID/GID, and invokes `docker compose up --build` to run everything in containers.\n\n### Using the CLI\n\nInteract directly with the local server:\n\n```bash\ncd cli\ngo run . put mykey \"hello world\"\ngo run . get mykey\ngo run . delete mykey\n```\n\n### HTTP Proxy\n\nIf you want standard HTTP REST endpoints instead of Unix Sockets, run the Go HTTP proxy:\n\n```bash\ncd http-proxy-go\ngo run main.go -port 8080\n```\n\nThis will allow you to run `curl http://localhost:8080/get?key=mykey`.\n\n### MCP Server\n\n`getMe` can be used by LLM clients (like Claude Desktop) through the Model Context Protocol.\n\n```bash\ncd mcp-server\nuv run getme-mcp-server\n```\n\n(See [`mcp-server/README.md`](./mcp-server/README.md) for configuration and integration instructions).\n\n<!-- --- -->\n\n## 📊 Running Benchmarks & Tests\n\nTo ensure no performance regressions or to stress test the database:\n\n1. Navigate to the specific module (e.g., `server`).\n2. Run standard tests:\n   ```bash\n   go test ./...\n   ```\n3. Run benchmarks:\n   ```bash\n   go test -bench . ./...\n   ```\n   (Note: For heavier stress/correctness testing, look into `server/tests/`).\n\n<!-- --- -->\n\n## 📦 SDKs\n\nSDKs are available across different languages. Find them in the `sdks/` directory:\n\n- [**Go SDK**](./sdks/goSdk/)\n- [**JavaScript / TypeScript SDK**](./sdks/jsSdk/)\n- [**Python SDK**](./sdks/pythonSdk/)\n- [**Java SDK**](./sdks/javaSdk/)\n\nAll SDKs interface directly with the Unix Domain Socket to provide optimal latency.\n\n**⚠️ Note on SDK Releases**: SDK versioning and publishing is managed automatically via an **Ephemeral Release Structure**. The CI/CD pipelines autonomously orchestrate the entire release lifecycle—from creating detached commits and tagging them, to generating changelogs and pushing builds to public registries—all from a single bump-type trigger. This keeps the `main` branch entirely clean of meaningless version-bump commits. \n*If you are exploring the code or contributing, **do not manually bump versions** in PRs. You can read more about this advanced architecture in the [SDKs README](./sdks/README.md#advanced-release--versioning-architecture).*\n\n<!-- --- -->\n\n## 📄 License\n\nThis project is licensed under the GNU Affero General Public License v3.0 (AGPLv3) - see the [LICENSE](LICENSE) file for details.\n",
  "bytes": 7647,
  "sha": "9f4d9b21695f8d81ed331fd20fd1898228c2e0289fb96d88836c2d338c865731",
  "repo_slug": "aatirnadim/getme",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_aatirnadim_getme_mcp_server_49842db8/readme"
}