{
  "version": "2",
  "generatedAt": "2026-11-03T21:36:30.074Z",
  "listing": {
    "slug": "usememos--memos",
    "name": "Memos",
    "tagline": "Single-binary self-hosted memo timeline with an OpenAPI-derived MCP endpoint at /mcp.",
    "shortTagline": "Self-hosted memo timeline",
    "description": "Memos is a Go single binary for short-form notes: a chronological markdown timeline with tags, attachments, pins, comments, reactions, and selective sharing. The server exposes a REST and gRPC API and, since 2026, a curated MCP endpoint at /mcp built from the same OpenAPI spec, so an agent authenticates with an access token and drives memos in-process against the API.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "notes-knowledge",
    "shape": "product",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "mixed",
    "codeStack": {
      "languages": [
        "Go",
        "TypeScript"
      ],
      "frameworks": [
        "Echo",
        "gRPC-Gateway",
        "React"
      ],
      "packageManager": "go modules, pnpm",
      "database": [
        "SQLite",
        "MySQL",
        "PostgreSQL"
      ],
      "hostingTarget": [
        "docker",
        "binary"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/usememos/memos",
        "owner": "usememos",
        "name": "memos",
        "license": "MIT",
        "stars": 62737,
        "lastCommit": "2026-09-03"
      }
    ],
    "interface": {
      "kind": "mcp",
      "url": "https://github.com/usememos/memos/tree/main/server/router/mcp",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Create, update, and delete memos",
        "reachable": true,
        "evidence": "catalog.go allowlist: MemoService_CreateMemo, UpdateMemo, DeleteMemo"
      },
      {
        "job": "List and search memos",
        "reachable": true,
        "evidence": "MemoService_ListMemos, GetMemo"
      },
      {
        "job": "Attach files",
        "reachable": true,
        "evidence": "AttachmentService_CreateAttachment, ListAttachments, DeleteAttachment; MemoService_SetMemoAttachments"
      },
      {
        "job": "Comment on memos",
        "reachable": true,
        "evidence": "MemoService_CreateMemoComment, ListMemoComments"
      },
      {
        "job": "React to memos",
        "reachable": true,
        "evidence": "MemoService_UpsertMemoReaction, ListMemoReactions, DeleteMemoReaction"
      },
      {
        "job": "Link memos to each other",
        "reachable": true,
        "evidence": "MemoService_SetMemoRelations, ListMemoRelations"
      },
      {
        "job": "Tag and pin",
        "reachable": true,
        "evidence": "tags are inline #hashtags in content; pinned is a memo field on UpdateMemo"
      },
      {
        "job": "Set visibility (private, workspace, public)",
        "reachable": true,
        "evidence": "visibility field on the memo resource"
      },
      {
        "job": "Memo view statistics",
        "reachable": true,
        "evidence": "MemoViewService_ListMemoViews"
      },
      {
        "job": "Users, workspace settings, webhooks, shortcuts",
        "reachable": false,
        "evidence": "not in the curated allowlist; only AuthService_GetCurrentUser is exposed"
      }
    ],
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/usememos/memos"
          },
          {
            "kind": "container",
            "url": "https://hub.docker.com/r/neosmemo/memos",
            "command": "docker run -d --name memos -p 5230:5230 -v ~/.memos:/var/opt/memos neosmemo/memos:stable"
          },
          {
            "kind": "binary",
            "url": "https://github.com/usememos/memos/releases"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or published skill found in the repo."
    },
    "customization": {
      "summary": "No config file: the binary reads flags or MEMOS_* env vars. MEMOS_PORT and MEMOS_DATA set the listener and data directory; MEMOS_DRIVER and MEMOS_DSN move it from SQLite to MySQL or Postgres; MEMOS_MODE selects prod or dev; MEMOS_INSTANCE_URL sets the public URL. Everything else is workspace settings in the UI.",
      "envVars": [
        "MEMOS_MODE",
        "MEMOS_PORT",
        "MEMOS_DATA",
        "MEMOS_DRIVER",
        "MEMOS_DSN",
        "MEMOS_INSTANCE_URL"
      ],
      "configFiles": [
        "docker-compose.yml"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 7
    },
    "useWhen": [
      "you want a private micro-journal an agent can post to and read back with one access token",
      "you want a Twitter-style work log for a small team on one container with zero telemetry"
    ],
    "accounts": [],
    "active": true,
    "lastActivity": "2026-09-03",
    "gotchas": [
      "MCP tools are a curated allowlist over the API: admin, users, and webhooks stay out of reach",
      "MCP uses Streamable HTTP at /mcp and needs an access token from the user's settings",
      "Env var names are taken from usememos.com docs by the sourcing pass; re-verify against cmd/memos/main.go"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: self-hosted web app, Docker quick start",
      "executionModel": "no model in the stack",
      "operability": "server/router/mcp/README.md: OpenAPI-driven MCP endpoint at /mcp using the official Go SDK; catalog.go allowlist",
      "effort": "MEMOS_* env vars documented at usememos.com/docs; no config file",
      "editions": "MIT; README 'zero telemetry'; no paid edition",
      "active": "pushedAt 2026-09-03",
      "provenance": "AGENTS.md at root; project from 2021"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.95,
      "operability": 0.95,
      "effort": 0.7,
      "reach": 0.9,
      "editions": 0.95,
      "provenance": 0.4
    },
    "openQuestions": [
      "Confirm MEMOS_* names in cmd/memos/main.go (docs deploy page did not list them)",
      "Is the /mcp endpoint enabled by default or behind a workspace setting?"
    ],
    "sources": [
      {
        "url": "https://github.com/usememos/memos",
        "foundBy": "sourcing:notes-knowledge:curated"
      },
      {
        "url": "https://github.com/usememos/memos/tree/main/server/router/mcp",
        "foundBy": "analysis"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "MIT single binary with a named env surface and an official in-repo MCP over the API; Reach complete for memos, partial for admin by design.",
      "disputed": []
    },
    "url": "apps/usememos--memos.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/usememos--memos.json"
  }
}
