VOOZH about

URL: https://glama.ai/mcp/servers/Hmbown/aleph?locale=ko-KR

โ‡ฑ Aleph by Hmbown | Glama


Aleph

๐Ÿ‘ License: MIT
๐Ÿ‘ Python 3.10+
๐Ÿ‘ PyPI version

Aleph๋Š” **์žฌ๊ท€์  ์–ธ์–ด ๋ชจ๋ธ(RLM)**์„ ์œ„ํ•œ MCP ์„œ๋ฒ„์ด์ž ๊ธฐ์ˆ (skill)์ž…๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค, ์ฝ”๋“œ ์‹คํ–‰, ์ฆ๊ฑฐ, ์žฌ๊ท€์™€ ๊ฐ™์€ ์ž‘์—… ์ƒํƒœ๋ฅผ ํ”„๋กฌํ”„ํŠธ ์ฐฝ ์™ธ๋ถ€์˜ Python ํ”„๋กœ์„ธ์Šค์—์„œ ์œ ์ง€ํ•˜๋ฏ€๋กœ, LLM์€ ์›์‹œ ์ฝ˜ํ…์ธ ๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๊ณ  ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค, ์žฅ๊ธฐ ํ”„๋กœ์ ํŠธ, ๋กœ๊ทธ, ๋ฌธ์„œ ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+-----------------+ tool calls +-----------------------------+
| LLM client | ---------------> | Aleph (Python process) |
| (context budget)| <--------------- | search / peek / exec / sub |
+-----------------+ small results +-----------------------------+

Aleph๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ :

  • ํ•œ ๋ฒˆ ๋กœ๋“œํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ์ถ”๋ก . ๋ฐ์ดํ„ฐ๋Š” ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์•„๋‹Œ Aleph ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„ ์ธก ์ปดํ“จํŒ…. exec_python์€ ์ „์ฒด ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํŒŒ์ƒ๋œ ๊ฒฐ๊ณผ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. JS/TS ์ €์žฅ์†Œ์˜ ๊ฒฝ์šฐ exec_javascript์™€ exec_typescript๊ฐ€ ๋™์ผํ•œ ctx ์œ„์—์„œ ์ง€์†์ ์ธ Node.js ๋Ÿฐํƒ€์ž„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์žฌ๊ท€. ํ•˜์œ„ ์ฟผ๋ฆฌ์™€ ๋ ˆ์‹œํ”ผ๋Š” ๋ณต์žกํ•œ ์ž‘์—…์„ ์—ฌ๋Ÿฌ ์ถ”๋ก  ๋‹จ๊ณ„๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.

  • ์ž‘์—… ๊ณต๊ฐ„ ์œ ์ง€. ์ปจํ…์ŠคํŠธ๋ฅผ ํŒŒ์ผ์ด๋‚˜ ์ƒ์„ฑ๋œ ์ž‘์—… ๊ณต๊ฐ„ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ๋‹ค์‹œ ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ์ด๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๋ฉฐ, ๋‚˜์ค‘์— ๊ธด ์กฐ์‚ฌ๋ฅผ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘

pip install "aleph-rlm[mcp]"
aleph-rlm install --profile claude # or: codex, portable, api
aleph-rlm doctor # verify everything is wired up

๊ทธ๋Ÿฐ ๋‹ค์Œ MCP ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  Aleph๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:

get_status()
list_contexts()

์„ ํƒ ์‚ฌํ•ญ์ธ /aleph(Claude Code) ๋˜๋Š” $aleph(Codex) ๊ธฐ์ˆ  ๋ฐ”๋กœ๊ฐ€๊ธฐ๋Š” ๊ตฌ์กฐํ™”๋œ RLM ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ ๋ช…๋ น/๊ธฐ์ˆ  ํด๋”์— docs/prompts/aleph.md๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”. ์ •ํ™•ํ•œ ๊ฒฝ๋กœ๋Š” MCP_SETUP.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹ค์ œ ์ €์žฅ์†Œ์—์„œ ์ž‘์—… ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

aleph --enable-actions --action-policy read-only

Cursor

--workspace-mode any๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ „์—ญ MCP(aleph-rlm install cursor)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ${workspaceFolder} + --workspace-mode fixed๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ MCP(aleph-rlm install cursor-project ์ €์žฅ์†Œ์—์„œ ์‹คํ–‰)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ฑ„ํŒ…, Composer ๋ฐ Cursor CLI๋Š” ํ•ด๋‹น MCP ๊ตฌ์„ฑ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. Cursor ํ™•์žฅ์€ ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ Aleph์— ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค. MCP_SETUP.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Related MCP server: BigContext MCP

์ง„์ž…์ 

๋ช…๋ น

๋ชจ๋“ˆ

๊ธฐ๋Šฅ

aleph

aleph.mcp.local_server:main

MCP ์„œ๋ฒ„. MCP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ, ๊ฒ€์ƒ‰, ์ฝ”๋“œ ์‹คํ–‰, ์ถ”๋ก , ์žฌ๊ท€ ๋ฐ ์ž‘์—… ๋„๊ตฌ๋ฅผ ์œ„ํ•œ 30๊ฐœ ์ด์ƒ์˜ ๋„๊ตฌ๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

aleph-rlm

aleph.cli:main

์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ๋ฐ CLI. MCP ํด๋ผ์ด์–ธํŠธ ์„ค์ •์„ ์œ„ํ•œ install, configure, doctor, uninstall์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ run(๋‹จ์ผ ์ฟผ๋ฆฌ), shell(๋Œ€ํ™”ํ˜• REPL), serve(MCP ์„œ๋ฒ„ ์ˆ˜๋™ ์‹œ์ž‘)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ํ”„๋กœํ•„

aleph-rlm install์€ ์‚ฌ์šฉํ•  ํ•˜์œ„ ์ฟผ๋ฆฌ ํ”„๋กœํ•„์„ ๋ฌป์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์€ ์žฌ๊ท€์  ์ถ”๋ก ์„ ์œ„ํ•ด sub_query ๋ฐ sub_query_batch๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์ค‘์ฒฉ๋œ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํ•„

๊ณ ์ • ๋Œ€์ƒ

portable

์ค‘์ฒฉ๋œ ๋ฐฑ์—”๋“œ ์—†์Œ โ€” ๋‚˜์ค‘์— ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์ž๋™ ๊ฐ์ง€์— ์˜์กด

claude

Claude CLI: --model opus, --effort low, ๊ณต์œ  ์„ธ์…˜ ํ™œ์„ฑํ™”

codex

Codex MCP: gpt-5.4, ๋‚ฎ์€ ์ถ”๋ก  ๋…ธ๋ ฅ, ๊ณต์œ  ์„ธ์…˜ ํ™œ์„ฑํ™”

api

OpenAI ํ˜ธํ™˜ API โ€” ALEPH_SUB_QUERY_API_KEY ๋ฐ ALEPH_SUB_QUERY_MODEL ์„ค์ •

aleph-rlm install claude-code --profile claude
aleph-rlm configure --profile codex # overwrite existing config

๋ชจ๋“  ํ™˜๊ฒฝ ๋ณ€์ˆ˜, CLI ํ”Œ๋ž˜๊ทธ ๋ฐ ๋Ÿฐํƒ€์ž„ configure(...) ์˜ต์…˜์€ docs/CONFIGURATION.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค ์›Œํฌํ”Œ๋กœ์šฐ

์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์ €์žฅ์†Œ๋‚˜ ๋‹ค์ค‘ ํด๋” ํ”„๋กœ์ ํŠธ์ธ ๊ฒฝ์šฐ, ์›์‹œ ์†Œ์Šค ํŒŒ์ผ์„ ๋ชจ๋ธ ์ฐฝ์— ๋˜์ง€๋Š” ๋Œ€์‹  ์••์ถ•๋œ ์ž‘์—… ๊ณต๊ฐ„ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋ธ์— ํ”„๋กœ์ ํŠธ ์ง€๋„๊ฐ€ ์ œ๊ณต๋˜์–ด ์ ๊ทน์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ €์žฅ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์„ธ์…˜์„ ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

load_workspace_manifest(paths=["src", "tests"], context_id="repo")
rg_search(pattern="FastAPI|APIRouter|router\\.", paths=["src", "tests"], load_context_id="routes")
load_file(path="pyproject.toml", context_id="pyproject")
exec_python(code="""
files = [line for line in ctx.splitlines() if line.startswith("- ")]
summary = {
 "indexed_entries": len(files),
 "top_python_files": [line for line in files if "| python |" in line][:10],
}
""", context_id="repo")
get_variable(name="summary", context_id="repo")
refresh_context(context_id="repo")

๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค ๋ฐ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ์ง„์ž…์ ์œผ๋กœ load_workspace_manifest๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๊ทธ๋Ÿฐ ๋‹ค์Œ load_file๋กœ ํŠน์ • ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๊ณ , rg_search๋กœ ์ €์žฅ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ, ์ž‘์—… ๊ณต๊ฐ„์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฐ”์ธ๋”ฉ๋œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜์„ธ์š”. ์ƒˆ๋กœ ๊ณ ์นจ์€ ์„ธ์…˜์˜ ์ถ”๋ก  ์ƒํƒœ, ์ฆ๊ฑฐ ๋กœ๊ทธ ๋ฐ ์ถ”์ ๋œ ์ž‘์—…์„ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ผ ํŒŒ์ผ ์›Œํฌํ”Œ๋กœ์šฐ

Aleph๋Š” ํ•˜๋‚˜์˜ ํฐ ํŒŒ์ผ์„ ํ•œ ๋ฒˆ ๋กœ๋“œํ•˜๊ณ , Aleph ๋‚ด๋ถ€์—์„œ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ, ์••์ถ•๋œ ๋‹ต๋ณ€๋งŒ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋„ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

load_file(path="/absolute/path/to/large_file.log", context_id="doc")
search_context(pattern="ERROR|WARN", context_id="doc")
peek_context(start=1, end=60, unit="lines", context_id="doc")
exec_python(code="""
errors = [line for line in ctx.splitlines() if "error" in line.lower()]
result = {
 "error_count": len(errors),
 "first_error": errors[0] if errors else None,
}
""", context_id="doc")
get_variable(name="result", context_id="doc")
save_session(context_id="doc", path=".aleph/doc.json")

์ค‘์š”ํ•œ ์Šต๊ด€์€ ์„œ๋ฒ„ ์ธก์—์„œ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. get_variable("ctx")๋ฅผ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ๋งˆ์„ธ์š”. ๋จผ์ € ๊ฒ€์ƒ‰, ํ•„ํ„ฐ๋ง, ์ฒญํฌ ์ฒ˜๋ฆฌ ๋˜๋Š” ์š”์•ฝํ•œ ๋‹ค์Œ ์ž‘์€ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์„ธ์š”.

MCP ๋Œ€์‹  ํ„ฐ๋ฏธ๋„ ์ „์šฉ ๋ชจ๋“œ๋ฅผ ์›ํ•˜๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์„ธ์š”:

aleph run "Summarize this log" --provider cli --model codex --context-file app.log

๋กœ์ปฌ ๋ชจ๋ธ (llama.cpp)

Aleph๋Š” ํด๋ผ์šฐ๋“œ API ๋Œ€์‹  ๋กœ์ปฌ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒ€์ƒ‰, ์ฝ”๋“œ ์‹คํ–‰, ์ˆ˜๋ ด์ด๋ผ๋Š” ์ „์ฒด RLM ๋ฃจํ”„๋ฅผ API ๋น„์šฉ ์—†์ด ์™„์ „ํžˆ ๋กœ์ปฌ ๋จธ์‹ ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ „์ œ ์กฐ๊ฑด: llama.cpp ๋ฐ GGUF ๋ชจ๋ธ ํŒŒ์ผ.

# Install llama.cpp
brew install llama.cpp # Mac
winget install ggml.LlamaCpp # Windows

# Start the server with your model
llama-server -m /path/to/model.gguf -c 16384 -ngl 99 --port 8080

์‹คํ–‰ ์ค‘์ธ ์„œ๋ฒ„๋ฅผ Aleph์— ์ง€์ •ํ•˜์„ธ์š”:

export ALEPH_PROVIDER=llamacpp
export ALEPH_LLAMACPP_URL=http://127.0.0.1:8080
export ALEPH_MODEL=local
aleph

๋˜๋Š” Aleph๊ฐ€ ์ž๋™์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋„๋ก ํ•˜์„ธ์š”:

export ALEPH_PROVIDER=llamacpp
export ALEPH_LLAMACPP_MODEL=/path/to/model.gguf
export ALEPH_LLAMACPP_CTX=16384
export ALEPH_MODEL=local
aleph

Qwen 3.5 9B (Q8_0, ~9 GB)๋กœ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  GGUF ๋ชจ๋ธ์ด ์ž‘๋™ํ•˜๋ฉฐ, ๋” ํฐ ๋ชจ๋ธ์ผ์ˆ˜๋ก RLM ๋ฃจํ”„์—์„œ ๋” ๋‚˜์€ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ถ”๋ก /์‚ฌ๊ณ ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋ธ(Qwen 3.5, QwQ ๋“ฑ)์€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ALEPH_LLAMACPP_* ๋ณ€์ˆ˜๋Š” CONFIGURATION.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ผ๋ฐ˜์ ์ธ ์›Œํฌ๋กœ๋“œ

์‹œ๋‚˜๋ฆฌ์˜ค

Aleph์˜ ์žฅ์ 

๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค / ํ”„๋กœ์ ํŠธ ๋ถ„์„

์ž‘์—… ๊ณต๊ฐ„ ๋งต ๊ตฌ์ถ•, ๋น ๋ฅธ ๊ฒ€์ƒ‰, ์ค‘์š”ํ•œ ํŒŒ์ผ๋งŒ ๋กœ๋“œ, ์„ธ์…˜ ์ƒˆ๋กœ ๊ณ ์นจ ๊ฐ€๋Šฅ

๋Œ€๊ทœ๋ชจ ๋กœ๊ทธ ๋ถ„์„

๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ๋กœ๋“œ, ํŒจํ„ด ์ถ”์ , ์ด๋ฒคํŠธ ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„

์ฝ”๋“œ๋ฒ ์ด์Šค ํƒ์ƒ‰

์‹ฌ๋ณผ ๊ฒ€์ƒ‰, ๊ฒฝ๋กœ ๊ฒ€์‚ฌ, ๋™์ž‘ ์ถ”์ 

๋ฐ์ดํ„ฐ ํƒ์ƒ‰

Python ๋„์šฐ๋ฏธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSON, CSV ๋ฐ ํ˜ผํ•ฉ ํ…์ŠคํŠธ ๋ถ„์„

๊ธด ๋ฌธ์„œ ๊ฒ€ํ† 

PDF, Word ๋ฌธ์„œ, HTML ๋ฐ ์••์ถ• ๋กœ๊ทธ ๋กœ๋“œ

์žฌ๊ท€์  ์กฐ์‚ฌ

ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ํ”„๋กฌํ”„ํŠธ ๋Œ€์‹  ํ•˜์œ„ ์ฟผ๋ฆฌ๋กœ ์ž‘์—… ๋ถ„ํ• 

์žฅ๊ธฐ ์‹คํ–‰ ์„ธ์…˜

์„ธ์…˜ ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํŒฉ ์ €์žฅ ๋ฐ ์žฌ๊ฐœ

ํ•ต์‹ฌ ๋„๊ตฌ

์นดํ…Œ๊ณ ๋ฆฌ

์ฃผ์š” ๋„๊ตฌ

๊ธฐ๋Šฅ

์ปจํ…์ŠคํŠธ ๋กœ๋“œ

load_context, load_file, load_workspace_manifest, refresh_context, list_contexts, diff_contexts

๋ฐ์ดํ„ฐ๋ฅผ Aleph ๋ฉ”๋ชจ๋ฆฌ์— ๋„ฃ๊ณ , ์ž‘์—… ๊ณต๊ฐ„ ์ž์‚ฐ์— ๋‹ค์‹œ ๋ฐ”์ธ๋”ฉํ•˜๋ฉฐ, ๋กœ๋“œ๋œ ํ•ญ๋ชฉ ๊ฒ€์‚ฌ

ํƒ์ƒ‰

search_context, semantic_search, peek_context, chunk_context, rg_search

๋‹ต๋ณ€์„ ์š”์ฒญํ•˜๊ธฐ ์ „์— ๊ด€๋ จ ์กฐ๊ฐ ์ฐพ๊ธฐ

์ปดํ“จํŒ…

exec_python, exec_javascript, exec_typescript, get_variable

์ „์ฒด ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด Python ๋˜๋Š” JS/TS๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํŒŒ์ƒ๋œ ๊ฒฐ๊ณผ๋งŒ ๊ฒ€์ƒ‰

์ถ”๋ก 

think, evaluate_progress, get_evidence, finalize

์ง„ํ–‰ ์ƒํ™ฉ์„ ๊ตฌ์กฐํ™”ํ•˜๊ณ  ์ฆ๊ฑฐ์™€ ํ•จ๊ป˜ ๋งˆ๋ฌด๋ฆฌ

์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜

configure, validate_recipe, estimate_recipe, run_recipe, run_recipe_code

๋ฐฑ์—”๋“œ ์ „ํ™˜ ๋ฐ ๋ฐ˜๋ณต์ ์ธ ์ถ”๋ก  ํŒจํ„ด ์ž๋™ํ™”

์ง€์†์„ฑ

save_session, load_session

ํ”„๋กฌํ”„ํŠธ ์ฐฝ ์™ธ๋ถ€์—์„œ ๊ธด ์กฐ์‚ฌ ์œ ์ง€

Python vs JS/TS REPL

Aleph์˜ ๊ธฐ๋ณธ ์ œ์–ด ๊ณ„์ธต์€ ์—ฌ์ „ํžˆ Python์ž…๋‹ˆ๋‹ค. exec_python์€ ๋ฒ”์šฉ ๋ถ„์„, ๋ ˆ์‹œํ”ผ ๋ฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ์œ„ํ•œ ๊ธฐ๋ณธ REPL๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

  • ์ „์ฒด Aleph ํ‘œ๋ฉด์ ์ด ํ•„์š”ํ•  ๋•Œ exec_python์„ ์‚ฌ์šฉํ•˜์„ธ์š”: Python ์šฐ์„  ํ”„๋กฌํ”„ํŠธ, Python์˜ ์ˆ˜์น˜/๊ธฐํ˜ธ ์Šคํƒ(cmath, mpmath, decimal, fractions, statistics, numpy, scipy, sympy, networkx) ๋˜๋Š” run_recipe_code๋ฅผ ํ†ตํ•œ ๋ ˆ์‹œํ”ผ ์‹คํ–‰.

  • ๋Œ€์ƒ ์ €์žฅ์†Œ๋‚˜ ๋ถ„์„์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ JS/TS ํ˜•ํƒœ์ด๊ณ  ์ง€์†์ ์ธ Node ์ƒํƒœ, JS ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐฐ์—ด/๊ฐ์ฒด ์กฐ์ž‘ ๋˜๋Š” await๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ์žฌ๊ท€๋ฅผ ์›ํ•  ๋•Œ exec_javascript / exec_typescript๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • exec_python ๋ ˆ์‹œํ”ผ DSL ๋„์šฐ๋ฏธ, ๋™๊ธฐ์‹ sub_query(...) / sub_aleph(...)๋ฅผ ํฌํ•จํ•œ ์ „์ฒด Aleph ๋„์šฐ๋ฏธ ํ‘œ๋ฉด์ , ๊ธฐ์กด ํ”„๋กฌํ”„ํŠธ ๋ฐ ์›Œํฌํ”Œ๋กœ์šฐ์™€์˜ ๊ฐ€์žฅ ๋„“์€ ํ˜ธํ™˜์„ฑ.

  • exec_javascript / exec_typescript JS/TS๊ฐ€ ๋งŽ์€ ์ €์žฅ์†Œ๋ฅผ ์œ„ํ•œ ์ปจํ…์ŠคํŠธ๋‹น ์ง€์†์ ์ธ Node.js ๋Ÿฐํƒ€์ž„. ๋™์ผํ•œ ctx๋ฅผ ๊ณต์œ ํ•˜๊ณ , ์ตœ์ƒ์œ„ await๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋น„๋™๊ธฐ await sub_query(...), await sub_query_batch(...), await sub_query_map(...), await sub_query_strict(...) ๋ฐ await sub_aleph(...)๋กœ ์žฌ๊ท€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ JS/TS์—์„œ ๋ ˆ์‹œํ”ผ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋ ˆ์‹œํ”ผ DSL(Recipe, Search, Take ๋“ฑ)์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

JS/TS ๋Ÿฐํƒ€์ž„์€ ์ฒซ ๋ฒˆ์งธ ํ•ธ๋“œ์˜คํ”„ ์กฐ๊ฐ๋ณด๋‹ค ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋กœ์ปฌ ๋„์šฐ๋ฏธ ์„ธํŠธ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค: ๊ฒ€์ƒ‰/์—ฟ๋ณด๊ธฐ/๋ผ์ธ/์ฒญํฌ, ์ถ”์ถœ ๋„์šฐ๋ฏธ(extract_emails, extract_todos, extract_routes ๋“ฑ), ํ…์ŠคํŠธ ์œ ํ‹ธ๋ฆฌํ‹ฐ(number_lines, grep_v, sort_lines, normalize_whitespace ๋“ฑ), ํ…์ŠคํŠธ ๋น„๊ต ๋„์šฐ๋ฏธ(diff, similarity, common_lines, diff_lines), ์ปฌ๋ ‰์…˜ ๋„์šฐ๋ฏธ(flatten, group_by, frequency, sample_items, shuffle_items ๋“ฑ), ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„์šฐ๋ฏธ(is_json, is_email, is_uuid ๋“ฑ), CSV/JSON ๋ณ€ํ™˜๊ธฐ ๋ฐ semantic_search.

JS/TS ๋Ÿฐํƒ€์ž„์—๋Š” ์ด์ œ ๋ ˆ์‹œํ”ผ DSL๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค: RecipeStep, RecipeBuilder ๋ฐ ๋ชจ๋“  ๋‹จ๊ณ„ ์ƒ์„ฑ์ž(Recipe, Search, Peek, Lines, Take, Chunk, Filter, MapSubQuery, SubQuery, Aggregate, Assign, Load, Finalize, as_recipe). ์œ ์ฐฝํ•œ ์ฒด์ด๋‹์ด๋‚˜ ํŒŒ์ดํ”„ ์Šคํƒ€์ผ๋กœ ๋ ˆ์‹œํ”ผ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

// Fluent style
Recipe("doc").search("ERROR").take(5).finalize().compile()

// Pipe style
Recipe("doc").pipe(Search("ERROR")).pipe(Take(5)).pipe(Finalize()).compile()

compile_recipe ๋ฐ run_recipe_code MCP ๋„๊ตฌ๋Š” ํ•ด๋‹น ๋Ÿฐํƒ€์ž„์—์„œ ๋ ˆ์‹œํ”ผ DSL ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด language ๋งค๊ฐœ๋ณ€์ˆ˜("python", "javascript", "typescript")๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

Python๊ณผ ์—ฌ์ „ํžˆ ๋‹ค๋ฅธ ์ :

  • Python์€ ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ์ด๋ฉฐ ๊ฐ€์žฅ ์ž˜ ์ง€์›๋˜๋Š” Aleph REPL์ž…๋‹ˆ๋‹ค.

  • JS/TS ์žฌ๊ท€ ๋„์šฐ๋ฏธ๋Š” ๋น„๋™๊ธฐ์ด๋ฉฐ await๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ ˆ์‹œํ”ผ ์‹คํ–‰(run_recipe)์€ ํ•ญ์ƒ Python ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. JS/TS ๊ฒฝ๋กœ๋Š” ๋ ˆ์‹œํ”ผ ๊ตฌ์ถ• ๋ฐ ์ปดํŒŒ์ผ๋งŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • JS๋Š” Python์˜ | ์—ฐ์‚ฐ์ž ๋Œ€์‹  RecipeBuilder.pipe() / ์œ ์ฐฝํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(JS์˜ |๋Š” ๋น„ํŠธ ๋‹จ์œ„ OR์ด๋ฉฐ ์ด ๋ชฉ์ ์œผ๋กœ ์˜ค๋ฒ„๋กœ๋“œํ•  ์ˆ˜ ์—†์Œ).

  • Python์˜ ๊ฐ€์ ธ์˜ค๊ธฐ ์ƒํƒœ๊ณ„๋Š” ์—ฌ์ „ํžˆ Python ์ „์šฉ์ž…๋‹ˆ๋‹ค. Node ๋Ÿฐํƒ€์ž„์€ ๋„์šฐ๋ฏธ ์ค‘์‹ฌ์ž…๋‹ˆ๋‹ค: ์ƒŒ๋“œ๋ฐ•์Šค ๋‚ด๋ถ€์—์„œ require, process, module ๋ฐ npm ํŒจํ‚ค์ง€ ๋กœ๋”ฉ์ด ์—†์Šต๋‹ˆ๋‹ค.

  • exec_typescript๋Š” ์‹คํ–‰์„ ์œ„ํ•ด ํƒ€์ž… ๊ตฌ๋ฌธ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ํ•œ TS ์ปดํŒŒ์ผ๋Ÿฌ, ํƒ€์ž… ์ฒด์ปค ๋˜๋Š” ts-node ํ™˜๊ฒฝ์ด ์•„๋‹™๋‹ˆ๋‹ค.

  • ์ •๊ทœ์‹ ํ”Œ๋ž˜๊ทธ ๋™์ž‘์€ ๊ฐ ๋Ÿฐํƒ€์ž„์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค: Python ๋„์šฐ๋ฏธ๋Š” Python re ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , JS/TS ๋„์šฐ๋ฏธ๋Š” JavaScript ์ •๊ทœ์‹ ํ”Œ๋ž˜๊ทธ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

JS/TS ์›Œํฌํ”Œ๋กœ์šฐ ์˜ˆ์‹œ:

exec_typescript(code=`
const routes: string[] = extract_routes('javascript').map((item) => item.value);
const routeKinds = frequency(
 routes.map((route) => (route.includes('.post(') ? 'write' : 'read')),
 2,
);
const notes = await sub_query_map(
 routes.map((route) => `Explain ${route}`),
 routes,
);
({ routeCount: routes.length, routeKinds, notes })
`, context_id="repo")

์•ˆ์ „ ๋ชจ๋ธ

Aleph๋Š” ๋ช…์‹œ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š” ํ•œ ์›์‹œ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ชจ๋ธ ์ฐฝ ๋ฐ–์œผ๋กœ ์œ ์ง€ํ•˜๋„๋ก ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค:

  • ๋„๊ตฌ ์‘๋‹ต์€ ์ œํ•œ๋˜๊ณ  ์ž˜๋ฆฝ๋‹ˆ๋‹ค.

  • get_variable("ctx")๋Š” ์ •์ฑ…์„ ์ธ์‹ํ•˜๋ฉฐ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๊ฐ€ ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

  • exec_python stdout, stderr ๋ฐ ๋ฐ˜ํ™˜ ๊ฐ’์€ ๋…๋ฆฝ์ ์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

  • ALEPH_CONTEXT_POLICY=isolated๋Š” ๋” ์—„๊ฒฉํ•œ ์„ธ์…˜ ๋‚ด๋ณด๋‚ด๊ธฐ/๊ฐ€์ ธ์˜ค๊ธฐ ๊ทœ์น™๊ณผ ๋” ๋ฐฉ์–ด์ ์ธ ๊ธฐ๋ณธ๊ฐ’์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ALEPH_ACTION_POLICY=read-only(๋˜๋Š” --action-policy read-only)๋Š” ์ž‘์—… ๋„๊ตฌ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค: ๊ฒ€์ƒ‰ ๋ฐ ํŒŒ์ผ ๋กœ๋“œ๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€๋งŒ ์“ฐ๊ธฐ ๋ฐ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์€ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์•ˆ์ „ํ•œ ํŒจํ„ด์€ ํ•ญ์ƒ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ๋Œ€๊ทœ๋ชจ ์ปจํ…์ŠคํŠธ๋ฅผ Aleph ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  2. Aleph ๋‚ด๋ถ€์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  3. ํ•„์š”ํ•œ ์ž‘์€ ๊ฒฐ๊ณผ๋งŒ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ ๋งต

  • MCP_SETUP.md: ํด๋ผ์ด์–ธํŠธ๋ณ„ MCP ๋ฐ ๊ธฐ์ˆ  ์„ค์น˜.

  • docs/prompts/aleph.md: /aleph ๋ฐ $aleph ์›Œํฌํ”Œ๋กœ์šฐ์™€ ๋„๊ตฌ ํŒจํ„ด.

  • docs/CONFIGURATION.md: ํ”Œ๋ž˜๊ทธ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ์ œํ•œ ๋ฐ ์•ˆ์ „ ์„ค์ •.

  • docs/langgraph-rlm-default.md: Aleph ์Šคํƒ€์ผ ๋„๊ตฌ ์‚ฌ์šฉ๊ณผ LangGraph ํ†ตํ•ฉ.

  • examples/langgraph_rlm_repo_improver.py: ์„ ํƒ์  LangSmith ์ถ”์ ์„ ํฌํ•จํ•œ ์ €์žฅ์†Œ ๊ฐœ์„  ์˜ˆ์‹œ.

  • CHANGELOG.md: ๋ฆด๋ฆฌ์Šค ๊ธฐ๋ก.

  • DEVELOPMENT.md: ๊ธฐ์—ฌ์ž ๊ฐ€์ด๋“œ.

๊ฐœ๋ฐœ

git clone https://github.com/Hmbown/aleph.git
cd aleph
pip install -e ".[dev,mcp]"
# Optional extras:
# .[docs] -> MarkItDown-backed document conversion
# .[observability] -> OpenTelemetry spans
pytest tests/ -v
ruff check aleph/ tests/

์ฐธ์กฐ

๋ผ์ด์„ ์Šค

MIT

A
license - permissive license
-
quality - not tested
A
maintenance

Maintenance

โ€“Maintainers
<1hResponse time
3dRelease cycle
33Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hmbown/aleph'

If you have feedback or need assistance with the MCP directory API, please join our Discord server