huml MCP server
2026년 10월 15일 커밋Claude, ChatGPT, Cursor와 같은 AI 클라이언트가 컨텍스트를 저장하고 검색할 수 있는 공유 마크다운 기반 메모리를 제공합니다.
다른 이름 CodeBlastr/huml
- 스타
- 1
- Tools
- 7
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 10월 15일
- 라이선스
- MIT
huml MCP란?
huml은(는) MCP server입니다. Claude, ChatGPT, Cursor와 같은 AI 클라이언트가 컨텍스트를 저장하고 검색할 수 있는 공유 마크다운 기반 메모리를 제공합니다. 7개 도구를 제공합니다. 예: memory_list, memory_read, memory_write.
프로젝트 README에서 생성된 요약
huml MCP server 정보
huml은 Claude, ChatGPT, Cursor와 같은 도구를 사용하는 개발자가 AI 에이전트를 위한 통합 마크다운 기반 메모리를 사용할 수 있게 합니다. 컨텍스트가 특정 벤더의 생태계에 갇히는 대신, 이 MCP server를 통해 여러 AI 클라이언트가 단일 마크다운 파일 저장소를 공유할 수 있습니다. 이를 통해 Claude Code와 공유한 프로젝트 결정 사항이나 개인적 선호도를 ChatGPT로 전환했을 때 즉시 사용할 수 있습니다.
사용자는 Workers, SQLite 스토리지를 위한 D1, Workers KV를 사용하여 자신의 Cloudflare 계정에 인스턴스를 배포합니다. 이 server는 파일만 관리하고 직접 LLM을 호출하지 않으므로, server 작동을 위한 추론 비용이나 추가 API key가 필요하지 않습니다. SQLite FTS5를 사용하여 전체 텍스트 검색을 지원하며 memory_list, memory_read, memory_write, memory_search와 같은 특정 도구를 제공합니다. 시스템은 쓰기 작업 시 버전 확인을 요구하여 동시 액세스를 처리하므로, 에이전트가 병합 과정 없이 서로의 변경 사항을 덮어쓰는 것을 방지합니다.
활용 사례
- 1서로 다른 AI 도구 간의 컨텍스트 동기화개발자가 프로젝트 결정 사항이나 글쓰기 선호도를 Claude와 ChatGPT 간에 공유하여 컨텍스트를 일관되게 유지할 수 있습니다.
- 2마크다운을 통한 개인 지식 관리표준 마크다운 파일과 폴더를 사용하여 AI 메모리를 수동으로 편집, 내보내기 또는 초기화할 수 있습니다.
- 3에이전트 동시 사용 중 데이터 손실 방지여러 AI 에이전트가 서로의 업데이트를 실수로 덮어쓰지 않고 동일한 메모리 파일과 상호작용할 수 있습니다.
- 4저장된 컨텍스트 검색AI 클라이언트가 전체 텍스트 검색을 사용하여 공유 메모리 내에서 특정 정보를 빠르게 찾을 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
huml MCP 도구 7
README에서 감지됨memory_listmemory_readmemory_writememory_appendmemory_str_replacememory_deletememory_search
| memory_list | — | |
| memory_read | — | |
| memory_write | — | |
| memory_append | — | |
| memory_str_replace | — | |
| memory_delete | — | |
| memory_search | — |
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능codeblastr/huml is public and reachablegithub.com/codeblastr/huml ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-10-15github.com/codeblastr/huml ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음7 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기huml
A simple, open source framework for connecting an AI executive assistant to all your tools. It keeps your context in one place, so every AI service and agent you connect works from the same memory.
In practice, huml is a small MCP server that stores plain markdown files. Claude, ChatGPT, Cursor, Claude Code, or any other MCP client can list, read, write, edit and search those files. You tell Claude Code about a client, a project decision, or how you like your emails written, and ChatGPT already knows it the next time you open it. Your context is no longer stuck inside one vendor's memory feature.
It's about 1,100 lines of TypeScript with three runtime dependencies. You deploy it to your own Cloudflare account, and the whole thing runs on the free plan for personal use.
Why it's this simple
Most AI memory projects are pipelines: they extract "facts" with an LLM, embed them into a vector database, build knowledge graphs, and decide for you what's worth remembering. huml doesn't do any of that. The models you already pay for are good at reading and writing text, so huml gives them a shared folder of markdown files and stays out of the way.
That buys you a few things:
- You can read and edit your memory yourself. It's markdown files with paths like
/people/jane.mdand/projects/launch.md. There are no opaque embeddings or extracted triples. You can export it, grep it, or seed it from a notes folder you already have. - It has no opinions about how you organize things. The only rule is that each file has a unique
namein its frontmatter. Folders, file layout and writing style are up to you (or your agents). huml has no built-in schema for "people", "tasks" or "preferences". - The server never calls an LLM. No API keys, no inference cost, no surprise bills, and nothing leaves your deployment except to the clients you connect. All the reasoning happens in the AI client you're already using.
- It works with any MCP client. No SDK, no plugin per vendor. If a tool speaks MCP over HTTP, it can connect.
- Many agents can use it at once without clobbering each other. Every write must include the version it read. If another session changed the file in the meantime, the write is rejected with the current content, and the agent merges its change and retries. There are no locks or sessions.
- It's small enough to audit. You're handing this server your personal and work context, and you can read all of it in an afternoon.
FAQ
Is this only for Claude? No. It's a standard MCP server. The setup instructions below cover Claude Code, Claude.ai, ChatGPT and Cursor, and anything else that supports remote MCP servers with a bearer token or OAuth should work too.
Do I need Cloudflare?
For this implementation, yes. It runs on Cloudflare Workers, stores files in D1 (Cloudflare's SQLite), and keeps OAuth state in Workers KV. A free Cloudflare account is enough; you don't need a paid plan or a domain on Cloudflare (a *.workers.dev URL works). Nothing about the design depends on Cloudflare, though: the tool contract is plain MCP, and storage is SQLite with FTS5 full-text search. Porting it to Node, Bun or Deno with local SQLite would mean replacing src/store.ts and the OAuth provider in src/index.ts. That port doesn't exist yet, and contributions are welcome.
Is huml.ai a hosted service I can sign up for?
No. huml.ai is the author's own deployment, and each deployment belongs to one person. You deploy your own copy (see Self-hosting) and point your clients at your URL. The examples below use https://huml.example.com as a stand-in.
Where does my data live? In a D1 database in your Cloudflare account. Only you hold the tokens. Client tokens are stored as SHA-256 hashes, and repeated failed logins from an IP get locked out.
Can it be shared by several people? Not yet. There's one memory per deployment, and every token has full read/write access to it. A team can share a deployment if everyone should see everything.
How is this different from ChatGPT or Claude's built-in memory? Built-in memory only works inside one product, and you can't choose what it keeps or how it's organized. huml is shared across every tool you connect, and it's just files you can see and edit.
How does search work without embeddings?
SQLite FTS5 with Porter stemming, ranked by BM25, over each file's name, description and content. With a few hundred to a few thousand well-named files, that plus memory_list is plenty for an agent to find what it needs. If you want semantic search, the retriever is behind an interface, and a Cloudflare Vectorize backend is stubbed out (see Layout). The tools stay the same either way.
How do my agents know to use it?
The server sends MCP instructions telling clients how to search, read and write safely. Whether a client checks memory on its own depends on the client, so it helps to add a line to your system prompt, CLAUDE.md, or custom instructions, e.g. "Check huml memory for context about people, projects and my preferences before answering, and save anything worth remembering." For agents that support skills, the agent skill covers this in more detail.
Tools
| Tool | Arguments | Returns |
|---|---|---|
memory_list |
path_prefix? |
path, name, description, aliases, updated_at (no content) |
memory_read |
path (string or array) |
content, version |
memory_write |
path, content, if_version |
new version (if_version: "new" creates) |
memory_append |
path, content, if_version |
new version |
memory_str_replace |
path, old_str, new_str, if_version |
new version; rejected on 0 or >1 matches |
memory_delete |
path, if_version |
deleted: true |
memory_search |
query, limit? |
path, name, snippet |
If if_version doesn't match the stored version, nothing is modified. The tool returns version_conflict with the current content and version, so the client can merge its change and retry.
Rules:
- Paths start with
/, use onlyA-Z a-z 0-9 - _ / ., and end in.md. - Each file is capped at 100KB.
- Every file needs frontmatter with a
name, and names are unique:
---
name: acme-corp
description: one line, what this covers and when to read it
aliases: [Acme, Acme Corporation]
---
- content lines
Protocol details: the endpoint is /mcp over Streamable HTTP. It supports MCP 2026-07-28 (stateless) and the older 2025-11-25, 2025-06-18 and 2025-03-26 initialize-based clients. Auth is either a static bearer token (Claude Code, Cursor) or OAuth 2.1 (Claude.ai, ChatGPT), where the consent page asks you for a huml token.
Self-hosting
You need Node 22+ and a Cloudflare account (the free plan is fine).
-
Clone and install:
git clone https://github.com/CodeBlastr/huml && cd huml npm install -
Copy
.env.exampleto.envand fill inCLOUDFLARE_API_TOKENandCLOUDFLARE_ACCOUNT_ID. The API token needs Workers Scripts:Edit, D1:Edit, Workers Routes:Edit and Workers KV Storage:Edit. (Runningnpx wrangler loginalso works for thenpx wranglercommands below.) -
Create your own database and KV namespace, then replace the
database_idand the KVidinwrangler.tomlwith the IDs these commands print:npx wrangler d1 create huml npx wrangler kv namespace create OAUTH_KV -
Point
wrangler.tomlat your URL:- Custom domain (the domain must be a zone in your Cloudflare account): change the
routespattern,PUBLIC_URL, and the first entry inALLOWED_ORIGINSto your domain. - No domain: set
workers_dev = true, delete theroutesblock, and setPUBLIC_URL(and the firstALLOWED_ORIGINSentry) tohttps://huml.<your-subdomain>.workers.dev.
- Custom domain (the domain must be a zone in your Cloudflare account): change the
-
Create the tables, deploy, and set a root token:
npm run migrate:remote npm run deploy openssl rand -hex 32 | npx wrangler secret put AUTH_TOKEN -
Set
HUML_URLin.envtohttps://<your-host>/mcp, then issue a token for each client (see below). If you already keep notes in markdown, you can import them withnpm run seed.
Connecting clients
Give each client its own token, so you can revoke one without touching the others:
npm run tokens -- issue claude-code # prints the token once
Claude Code
claude mcp add --transport http --scope user huml https://huml.example.com/mcp \
--header "Authorization: Bearer <token>"
Cursor
Add this to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project:
{
"mcpServers": {
"huml": {
"url": "https://huml.example.com/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Claude.ai
- Go to Settings → Connectors → Add custom connector.
- Name it
humland set the URL tohttps://huml.example.com/mcp. Leave the OAuth client ID and secret empty; the connector registers itself. - Click Connect. On your huml consent page, paste a token (e.g. from
npm run tokens -- issue claude-ai) and click Allow.
ChatGPT
- Go to Settings → Apps & Connectors → Advanced settings and turn on Developer mode.
- Under Apps & Connectors, click Create. Set the name to
huml, the MCP server URL tohttps://huml.example.com/mcp, and Authentication to OAuth. - Approve on your huml consent page with a token (e.g. from
npm run tokens -- issue chatgpt).
An OAuth connection is tied to the token that approved it. Revoking that token (or rotating AUTH_TOKEN, if that's what you used) disconnects the client.
Agent skill
skills/huml/SKILL.md is an agent skill in the open SKILL.md format. It tells an agent when to check memory, what is worth saving, how to write with if_version and handle conflicts, and what search can and can't do. It only works alongside a connected huml server; it doesn't replace the setup above.
Claude Code: copy the folder into your personal skills (all projects) or one project's skills:
mkdir -p ~/.claude/skills && cp -r skills/huml ~/.claude/skills/ # all projects
mkdir -p .claude/skills && cp -r skills/huml .claude/skills/ # one project
Other SKILL.md-compatible agents: copy the skills/huml/ folder into the agent's skills directory, as described in its docs.
Admin
All admin commands run against your deployed database. Add --local to target the wrangler dev database instead.
npm run tokens -- issue <label> # new client token (shown once)
npm run tokens -- list
npm run tokens -- revoke <id>
npm run tokens -- unlock # show IPs with failed-auth counts
npm run tokens -- unlock <ip> # clear a lockout (10 failures / 15 min → 429)
npm run tokens -- unlock --all
npm run tokens -- rebuild # rebuild the FTS index if search looks wrong
Import a local folder of markdown. ./notes/areas/x.md becomes /areas/x.md; use --prefix to import under a different path:
npm run seed -- ./notes [--prefix /imported]
Run the end-to-end acceptance check against HUML_URL. It creates and deletes one doc under /_smoke/, trips the lockout on purpose, then clears it:
npm run smoke
To rotate the root token:
openssl rand -hex 32 | npx wrangler secret put AUTH_TOKEN
Development
npm test # vitest against a local D1
npm run dev # http://127.0.0.1:8787/mcp
Credentials live in three separate places, and none of them are ever committed:
| What | Where |
|---|---|
Wrangler CLI auth (CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID) and script token (HUML_TOKEN) |
.env (gitignored; see .env.example) |
Local dev AUTH_TOKEN |
.dev.vars (gitignored; see .dev.vars.example) |
Production AUTH_TOKEN |
wrangler secret put AUTH_TOKEN, only |
Layout
src/index.ts entry: OAuth provider, Origin check, failed-auth lockout
src/mcp.ts JSON-RPC / MCP protocol handling (both protocol eras)
src/tools.ts tool schemas and handlers
src/store.ts D1 storage with compare-and-swap writes
src/frontmatter.ts path, size and frontmatter validation
src/auth.ts token checks and rate limiting
src/oauth-ui.ts /authorize consent page
src/retrieval/ Retriever interface, LexicalRetriever (FTS5), VectorRetriever stub
migrations/ D1 schema
scripts/ seed, tokens (admin), smoke (acceptance test)
skills/huml/ agent skill (SKILL.md) for clients that support skills
Search can move to Cloudflare Vectorize without changing the tool contract:
- Implement
src/retrieval/vector.ts. - Uncomment the
[[vectorize]]and[ai]bindings inwrangler.toml.
makeRetriever() picks VectorRetriever automatically once both bindings exist.
How it was built
huml was written with Claude Code from a single detailed prompt, plus a few short follow-ups. The full prompt is in PROMPT.md, verbatim, so you can compare what was asked for with what was built.
License
MIT
huml MCP 질문
huml MCP는 어떤 도구를 제공하나요?
7개 도구를 제공합니다. 예: memory_list, memory_read, memory_write, memory_append, memory_str_replace.
Claude 전용인가요?
아니요, Claude Code, claude.ai, ChatGPT, Cursor 및 원격 MCP server를 지원하는 모든 클라이언트에서 작동하는 표준 MCP server입니다.
Cloudflare가 필요한가요?
이 특정 구현의 경우 Cloudflare Workers에서 실행되며 D1 및 KV 스토리지 사용하므로 필요합니다. 다만 설계 자체가 Cloudflare에 엄격하게 의존하는 것은 아닙니다.
데이터는 어디에 저장되나요?
데이터는 사용자의 Cloudflare 계정 내 D1 데이터베이스에 저장됩니다.
ChatGPT나 Claude의 내장 메모리와 무엇이 다른가요?
단일 제품에 국한된 내장 메모리와 달리, huml은 연결된 모든 도구 간에 공유되며 편집 가능한 마크다운 파일을 사용합니다.