Context7
Up-to-date docs for AI agents
作者提供的说明(英文原文)
MCP tools for Sema — eval, compile, build, format, and docs for a Lisp with LLM primitives.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
链接指向作者自己的文件;我们不托管也不重新打包它。打开文件后,Claude Desktop 会进行安装。
在终端中运行这条命令
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
发布者(sema-lang.com)不是仓库所有者(sema-lisp);可能是其他人代为上架的
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 0 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(2.0.0)于10天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 MCPB。
同一分类中有:Context7, Codebase Memory, Exa
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
A Lisp where LLM agents are language primitives, not an SDK — compiled to a fast bytecode VM, shipped as a single binary.
Docs · Playground · For Agents · Examples · Issues
Stop rewriting the agent loop. Every LLM script grows the same scaffolding — retries, caching, cost caps, rate limits, tool dispatch, conversation state. Sema makes that scaffolding the runtime: your script stays the size of its idea, ships as a single binary, and your coding agent already speaks the language.
Sema is a Scheme-like Lisp where prompts are s-expressions, conversations are persistent data structures, and LLM calls are just another form of evaluation — with Clojure-style keywords (:foo), map literals ({:key val}), and vector literals ([1 2 3]).
A coding agent with file tools, safety checks, and budget tracking — in ~40 lines:
;; Define tools the LLM can call
(deftool read-file "Read a file's contents" {:path {:type :string :description "File path"}} (lambda (path) (if (file/exists? path) (file/read path) "File not found")))
(deftool edit-file "Replace text in a file" {:path {:type :string} :old {:type :string} :new {:type :string}} (lambda (path old new) (file/write path (string/replace (file/read path) old new)) "Done"))
(deftool run-command "Run a shell command" {:command {:type :string :description "Shell command to run"}} (lambda (command) (:stdout (shell "sh" "-c" command))))
;; Create an agent with tools, system prompt, and spending limit (defagent coder {:system (format "You are a coding assistant. Working directory: ~a" (sys/cwd)) :tools [read-file edit-file run-command] :max-turns 20}) ; no :model → uses the configured default provider
;; Run it — budget is scoped, automatically restored after the block (llm/with-budget {:max-cost-usd 0.50} (lambda () (define result (agent/run coder "Add error handling to src/main.rs")) (println (:response result)) (println (format "Cost: $~a" (:spent (llm/budget-remaining))))))
;; Simple completion
(llm/complete "Explain monads in one sentence")
;; Structured data extraction — returns a map, not a string (llm/extract {:vendor {:type :string} :amount {:type :number} :date {:type :string}} "Bought coffee for $4.50 at Blue Bottle on Jan 15") ;; => {:amount 4.5 :date "2025-01-15" :vendor "Blue Bottle"}
;; Classification (llm/classify (list :positive :negative :neutral) "This product is amazing!") ;; => :positive
;; Multi-turn conversations as immutable data (define conv (conversation/new {:model "claude-haiku-4-5-20251001"})) (define conv (conversation/say conv "The secret number is 7")) (define conv (conversation/say conv "What's the secret number?")) (conversation/last-reply conv) ;; => "The secret number is 7."
;; Streaming (llm/stream "Tell me a story" {:max-tokens 500})
;; Batch — all prompts sent concurrently (llm/batch (list "Translate 'hello' to French" "Translate 'hello' to Spanish" "Translate 'hello' to German"))
;; Vision — extract structured data from images (llm/extract-from-image {:text :string :background_color :string} "assets/logo.png") ;; => {:background_color "white" :text "Sema"}
;; Multi-modal chat — send images in messages (define img (file/read-bytes "photo.jpg")) (llm/chat (list (message/with-image :user "Describe this image." img)))
;; Cost tracking (llm/set-budget 1.00) (llm/budget-remaining) ;; => {:limit 1.0 :spent 0.05 :remaining 0.95}
;; Response caching — avoid duplicate API calls during development (llm/with-cache (lambda () (llm/complete "Explain monads")))
;; Cassettes — record real responses once, replay them in CI (no keys, no network) (llm/with-cassette "fixtures/run.jsonl" {:mode :auto} (lambda () (llm/complete "Explain monads")))
;; Fallback chains — automatic provider failover (llm/with-fallback [:anthropic :openai :groq] (lambda () (llm/complete "Hello")))
;; In-memory vector store for semantic search (RAG) (vector-store/create "docs") (vector-store/add "docs" "id" (llm/embed "text") {:source "file.txt"}) (vector-store/search "docs" (llm/embed "query") 5)
;; Cross-encoder reranking — the retrieve-many → rerank-to-a-few RAG move (llm/rerank "how do I read a file?" ["file/read returns a string" "http/get fetches a URL"] {:top-k 3}) ;; => ({:index 0 :score 0.98 :document "file/read returns a string"} ...)
;; Text chunking for LLM pipelines (text/chunk long-document {:size 500 :overlap 100})
;; Prompt templates (prompt/render "Hello {{name}}" {:name "Alice"}) ; => "Hello Alice"
;; Persistent key-value store (kv/open "cache" "cache.json") (kv/set "cache" "key" {:data "value"}) (kv/get "cache" "key")
All providers are auto-configured from environment variables — just set the API key and go.
| Provider | Chat | Stream | Tools | Embeddings | Vision |
|---|---|---|---|---|---|
| Anthropic | ✅ | ✅ | ✅ | — | ✅ |
| OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
| Google Gemini | ✅ | ✅ | ✅ | — | ✅ |
| Ollama | ✅ | ✅ | ✅ | — | ✅ |
| Groq | ✅ | ✅ | ✅ | — | — |
| xAI | ✅ | ✅ | ✅ | — | — |
| Mistral | ✅ | ✅ | ✅ | — | — |
| Moonshot | ✅ | ✅ | ✅ | — | — |
| Jina | — | — | — | ✅ | — |
| Voyage | — | — | — | ✅ | — |
| Cohere | — | — | — | ✅ | — |
| Any OpenAI-compat | ✅ | ✅ | ✅ | — | ✅ |
| Custom (Lisp) | ✅ | — | ✅ | — | — |
Hundreds of built-in functions, tail-call optimization, macros, modules, error handling — not a toy.
;; Closures, higher-order functions, TCO
(define (fibonacci n) (let loop ((i 0) (a 0) (b 1)) (if (= i n) a (loop (+ i 1) b (+ a b))))) (fibonacci 50) ;; => 12586269025
;; Full R7RS numeric tower — bignums, exact rationals, complex numbers (expt 2 100) ;; => 1267650600228229401496703205376 (+ 1/2 1/3) ;; => 5/6 (sqrt -1) ;; => 0+1i
;; Maps, keywords-as-functions, f-strings (define person {:name "Ada" :age 36 :langs ["Lisp" "Rust"]}) (:name person) ;; => "Ada" (println f"${(:name person)} knows ${(length (:langs person))} languages")
;; Destructuring (let (({:keys [name age]} person)) (println f"${name} is ${age}"))
;; Pattern matching with guards (define (classify n) (match n (x when (> x 100) "big") (x when (> x 0) "small") (_ "non-positive")))
;; Functional pipelines (->> (range 1 100) (filter even?) (map #(* % %)) (take 5)) ;; => (4 16 36 64 100)
;; Nested data access (define config {:db {:host "localhost" :port 5432}}) (get-in config [:db :host]) ;; => "localhost"
;; Macros (defmacro unless (test . body) `(if ,test nil (begin ,@body)))
;; Modules (module utils (export square) (define (square x) (* x x)))
;; HTTP, JSON, regex, file I/O, crypto, CSV, datetime... (define data (json/decode (http/get "https://api.example.com/data")))
📖 Full language reference, stdlib docs, and more examples at [sema-lang.com/docs](https://sema-lang.com/docs/)
[sema.run](https://sema.run) — Browser-based playground with 20+ example programs.
No install required. Runs entirely in WebAssembly.
Sema is new, so your agent hasn't seen it. Fix that in one command — append the agent crib sheet to your repo's AGENTS.md (and point CLAUDE.md at it):
curl -fsSL https://sema-lang.com/docs/for-agents.md >> AGENTS.md
ln -s AGENTS.md CLAUDE.md # Claude Code, Cursor, etc. read this
for-agents.md is a compact working guide for an LLM that already knows a Lisp. It covers the rules most likely to cause incorrect generated code and links to /llms.txt, a machine index of every doc page. The agent can fetch only the page it needs (for example, /docs/llm/tools-agents.md) instead of loading the whole manual. Every doc URL also serves raw Markdown: append .md to a sema-lang.com/docs/... link to get the source.
Install pre-built binaries (no Rust required):
# macOS / Linux
curl -fsSL https://sema-lang.com/install.sh | sh
powershell -ExecutionPolicy ByPass -c "irm https://github.com/sema-lisp/sema/releases/latest/download/sema-lang-installer.ps1 | iex"
brew install helgesverre/tap/sema-lang
Or install from crates.io:
cargo install sema-lang
Or build from source:
git clone https://github.com/sema-lisp/sema
cd sema && cargo build --release
For local development that needs an optimized binary, use jake release-fast or cargo build --profile release-fast. The binary is at target/release-fast/sema. This profile uses incremental compilation and parallel codegen, with no cross-crate LTO. Use --release for performance measurements and distribution builds. See the build profile measurements for build times and runtime tradeoffs.
sema # REPL (with tab completion)
sema script.sema # Run a file sema -e '(+ 1 2)' # Evaluate expression sema --no-llm script.sema # Run without LLM (faster startup) sema build app.sema -o myapp # Build standalone executable ./myapp # Run without sema installed
Generate tab-completion scripts for your shell:
# Zsh (macOS / Linux)
mkdir -p ~/.zsh/completions sema completions zsh > ~/.zsh/completions/_sema
mkdir -p ~/.local/share/bash-completion/completions sema completions bash > ~/.local/share/bash-completion/completions/sema
sema completions fish > ~/.config/fish/completions/sema.fish
📖 Full setup instructions for all shells: [sema-lang.com/docs/shell-completions](https://sema-lang.com/docs/shell-completions)
📖 Full CLI reference, flags, and REPL commands: [sema-lang.com/docs/cli](https://sema-lang.com/docs/cli)
Each editor plugin lives in its own repo under the sema-lisp org:
| Editor | Repository | Install |
|---|---|---|
| VS Code | vscode-sema | ext install sema-lang.sema-lang |
只显示了开头部分;其余内容请在仓库中阅读