{
  "markdown": "# Hekkova MCP Server\n\nThe permanent memory layer for AI agents. Connect any MCP-compatible AI (Claude, ChatGPT, Gemini, Cursor, custom agents) and mint moments — photos, videos, audio, text — permanently to the Polygon blockchain with IPFS + Filecoin storage, Lit Protocol encryption, and privacy tiers that let you control who sees what.\n\n---\n\n## Quick Start\n\n```bash\n# 1. Install dependencies\nnpm install\n\n# 2. Copy and configure environment variables\ncp .env.example .env\n# Edit .env with your Supabase, Thirdweb, Pinata, and Stripe credentials\n\n# 3. Seed the local test account and API key\nnpm run seed\n\n# 4. Start the development server\nnpm run dev\n# → Server running at http://localhost:3000/mcp\n```\n\n---\n\n## Connect with Claude Desktop\n\nAdd this to your Claude Desktop config file:\n\n**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n**Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"hekkova\": {\n      \"type\": \"url\",\n      \"url\": \"http://localhost:3000/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer hk_test_local_dev_key_12345678\"\n      }\n    }\n  }\n}\n```\n\nFor production, replace the URL and API key:\n\n```json\n{\n  \"mcpServers\": {\n    \"hekkova\": {\n      \"type\": \"url\",\n      \"url\": \"https://mcp.hekkova.com/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer hk_live_YOUR_API_KEY\"\n      }\n    }\n  }\n}\n```\n\nGet your API key at [hekkova.com/dashboard/keys](https://hekkova.com/dashboard/keys).\n\n---\n\n## Tool Reference\n\n| Tool | Description |\n|---|---|\n| `mint_moment` | Mint media (photo, video, audio, text) permanently to Polygon. Encrypts based on phase, pins to IPFS, mints ERC-721 NFT. Returns a Block ID. |\n| `mint_from_url` | Fetch a public URL (tweet, Instagram post, image, web page) and mint it. Extracts og:title and og:image automatically. |\n| `list_moments` | Paginated list of all minted moments. Filterable by phase, category, or search query. |\n| `get_moment` | Full details for a single moment by Block ID: CIDs, transaction hash, phase, tags, and more. |\n| `update_phase` | Change a moment's privacy phase. Costs 1 credit (text/image) or 2 credits (video). Legacy Plan includes 10 free Phase Shifts/month. |\n| `export_moments` | Export all moments as JSON or CSV. Returns a 24-hour download URL with all Block IDs and IPFS CIDs. |\n| `get_balance` | Check remaining mint credits, current plan (free / arc_builder / legacy), and phase shift balance. |\n| `get_account` | Account identity: Light ID, display name, wallet address, default phase, and legacy plan status. |\n\n---\n\n## Privacy Phases\n\n| Phase | Access | Encryption |\n|---|---|---|\n| `new_moon` | Owner only | Lit Protocol (owner wallet ACC) |\n| `crescent` | Close circle (2–10 people) | Lit Protocol (shared access conditions) |\n| `gibbous` | Extended group (up to 50) | Token-gated via Hekkova ERC-721 |\n| `full_moon` | Fully public | None |\n\n---\n\n## Moment Categories\n\n| Category | Meaning |\n|---|---|\n| `super_moon` | Major life event |\n| `blue_moon` | Rare moment |\n| `super_blue_moon` | Once-in-a-lifetime |\n| `eclipse` | Time-locked — sealed until `eclipse_reveal_date` |\n| `null` | Uncategorized |\n\n---\n\n## Rate Limits\n\n| Plan | Requests/min | Mints/min |\n|---|---|---|\n| Sandbox (test keys) | 10 | 1 |\n| Standard (any paid pack) | 60 | 10 |\n| Legacy Plan | 120 | 20 |\n\nRate limit headers are included on every response:\n```\nX-RateLimit-Limit: 60\nX-RateLimit-Remaining: 58\nX-RateLimit-Reset: 1710680460\n```\n\n---\n\n## Running Tests\n\n```bash\n# Make sure the server is running in another terminal\nnpm run dev\n\n# Run the test client\nnpm run test-client\n```\n\n---\n\n## Deployment\n\n### Vercel (Serverless)\n\n```bash\nnpm install -g vercel\nvercel\n```\n\nAdd a `vercel.json`:\n\n```json\n{\n  \"builds\": [{ \"src\": \"src/server.ts\", \"use\": \"@vercel/node\" }],\n  \"routes\": [{ \"src\": \"/(.*)\", \"dest\": \"src/server.ts\" }]\n}\n```\n\nSet all environment variables in the Vercel dashboard under Project → Settings → Environment Variables.\n\n### Railway\n\n```bash\nnpm install -g @railway/cli\nrailway login\nrailway init\nrailway up\n```\n\nSet environment variables in the Railway dashboard. Railway will auto-detect the `npm start` script.\n\n### Fly.io\n\n```bash\nnpm install -g flyctl\nfly auth login\nfly launch\n```\n\nFly will generate a `fly.toml`. Set secrets with:\n\n```bash\nfly secrets set SUPABASE_URL=... SUPABASE_SERVICE_KEY=... THIRDWEB_SECRET_KEY=...\nfly deploy\n```\n\n---\n\n## Project Structure\n\n```\nhekkova-mcp/\n├── src/\n│   ├── server.ts          # Express + MCP server, auth middleware, rate limiter\n│   ├── config.ts          # Typed config from environment variables\n│   ├── types/index.ts     # TypeScript interfaces (Account, Moment, ApiKey, etc.)\n│   ├── services/\n│   │   ├── auth.ts        # API key validation and hashing\n│   │   ├── database.ts    # Supabase queries (moments, accounts, API keys)\n│   │   ├── blockchain.ts  # Thirdweb/Polygon minting (stub → real)\n│   │   ├── storage.ts     # Pinata IPFS pinning (stub → real)\n│   │   └── encryption.ts  # Lit Protocol encryption (stub → real)\n│   └── tools/\n│       ├── mint-moment.ts\n│       ├── mint-from-url.ts\n│       ├── list-moments.ts\n│       ├── get-moment.ts\n│       ├── update-phase.ts\n│       ├── export-moments.ts\n│       ├── get-balance.ts\n│       └── get-account.ts\n├── scripts/\n│   ├── seed.ts            # Creates test account + API key in Supabase\n│   └── test-client.ts     # Exercises all 8 tools against the running server\n├── package.json\n├── tsconfig.json\n├── .env.example\n└── README.md\n```\n\n---\n\n## Supabase Schema\n\nYou will need these tables in your Supabase project:\n\n```sql\n-- Accounts\ncreate table accounts (\n  id text primary key default gen_random_uuid()::text,\n  display_name text not null,\n  light_id text,\n  wallet_address text,\n  mints_remaining integer not null default 0,\n  total_minted integer not null default 0,\n  default_phase text not null default 'new_moon',\n  legacy_plan boolean not null default false,\n  created_at timestamptz not null default now()\n);\n\n-- API Keys\ncreate table api_keys (\n  id text primary key default gen_random_uuid()::text,\n  account_id text not null references accounts(id) on delete cascade,\n  key_hash text not null unique,\n  key_prefix text not null,\n  environment text not null default 'live',\n  created_at timestamptz not null default now(),\n  revoked_at timestamptz\n);\n\n-- Moments\ncreate table moments (\n  id text primary key default gen_random_uuid()::text,\n  account_id text not null references accounts(id) on delete cascade,\n  block_id text not null unique,\n  token_id integer not null,\n  title text not null,\n  description text,\n  phase text not null,\n  category text,\n  encrypted boolean not null default false,\n  media_cid text not null,\n  metadata_cid text not null,\n  media_type text not null,\n  polygon_tx text not null,\n  source_url text,\n  source_platform text,\n  eclipse_reveal_date timestamptz,\n  tags text[] not null default '{}',\n  timestamp timestamptz not null default now(),\n  created_at timestamptz not null default now()\n);\n\n-- Indexes\ncreate index on api_keys(key_hash);\ncreate index on moments(account_id, timestamp desc);\ncreate index on moments(block_id);\n```\n\n---\n\n## Full Spec\n\nSee the full technical specification: [hekkova-mcp-server-spec.md](../Hekkova%20Site/hekkova-mcp-server-spec.md)\n\nProduction endpoint: `https://mcp.hekkova.com/mcp`\n",
  "bytes": 7341,
  "sha": "7cbac08711fb628701c070b8dc31c0eebebe29bdc7741cdf419e358764dbdc82",
  "repo_slug": "hekkova/hekkova-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_hekkova_mcp_587156be/readme"
}