Evergreen
Uses Amazon Bedrock (Claude) for AI-powered document drafting, Q&A, coverage analysis, and drift detection.
Integrates with GitHub to read code, pull requests, and repositories for automated document generation.
Integrates with Linear to harvest tickets and lessons, enabling automated knowledge extraction from issue tracking.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Evergreencheck drift on the authentication docs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π² Evergreen
Documentation that writes and maintains itself.
Evergreen is an AI knowledge layer on Cloudflare Workers. It drafts docs from your real sources β code, PRs, tickets, and Claude memory β you approve them in seconds, and it keeps them from rotting: when the source changes, the doc is flagged stale and a refresh is drafted for you. The same knowledge is readable and writable by AI agents over MCP.
This repo is a template. Click βUse this templateβ, then follow Quickstart below. The entity dictionary and a few config values are placeholders β make them yours.
π New here? Read USAGE.md β full configuration checklist (exactly what to fill in), deploy steps, how to use every feature, and how to connect your Claude.
The loop
flowchart LR
subgraph SRC["Real sources"]
direction TB
C["Code / PRs"]
T["Tickets"]
M["Claude memory"]
end
SRC --> LLM["Claude<br/>(Bedrock)"]
LLM --> DR["Drafts"]
DR -->|"human approves<br/>in seconds"| KB[("Knowledge base<br/>D1: facts + entity graph")]
KB --> UI["Web UI<br/>/evergreen"]
KB --> MCP["MCP server<br/>agents read & write"]
KB -. "code & facts change" .-> DFT["Drift +<br/>auto-maintain"]
DFT -. "flag stale Β· draft refresh" .-> DRGenerate β approve β detect drift β refresh β repeat. The loop closes itself.
What's inside
Surface | What it does |
Generate | Point at a GitHub repo, subtree, or PR β Claude reads the source and drafts a doc. |
Coverage | Find topics with lots of facts but no doc, and synthesize one from what's already known. |
Review | Validate AI-distilled lessons harvested from your tracker in one click. |
Drift + Auto-maintain | Docs refresh themselves as code & facts change β nightly and on demand. |
Ask | Grounded Q&A over the knowledge base, every answer cited. |
Team memory | Connect your Claude memory so teammates can pick up where you left off. |
Knowledge graph | Entities (clients, systems, ticketsβ¦) auto-extracted and navigable. |
MCP | An MCP server so AI agents read and extend the docs directly. |
Architecture
Cloudflare Workers + Hono
D1 (SQLite) with FTS5 full-text search β the knowledge base is a graph of facts β entities
Amazon Bedrock (Claude) for generation, synthesis, Q&A, and drift judgment
MCP (streamable HTTP) for agent access
Auth via Cloudflare Access (SSO) with a
WEB_PASSWORDbasic-auth fallback
The core knowledge base lives at /; the Evergreen doc surface is additive under /evergreen/*, in its own hack_* tables β generated docs only promote into the real knowledge base on human approval.
Quickstart
bun install # or npm install
# 1. Create the database + token store
wrangler d1 create evergreen # paste database_id into wrangler.jsonc
wrangler kv namespace create TOKENS # paste id into wrangler.jsonc
bun run db:init:remote # apply migrations/
# 2. Secrets
wrangler secret put WEB_PASSWORD # browser UI password
wrangler secret put MCP_SHARED_SECRET # fallback MCP bearer
wrangler secret put BEDROCK_API_KEY # Bedrock bearer token (for the LLM)
wrangler secret put LINEAR_API_KEY # optional β ticket harvester
wrangler secret put GITHUB_TOKEN # optional β private repos + higher rate limits
# 3. Set account_id / route / CF_ACCESS_TEAM_DOMAIN in wrangler.jsonc, then:
bun run deployLocal dev
cp .dev.vars.example .dev.vars # set WEB_PASSWORD, BEDROCK_API_KEY, β¦
bun run db:init:local
bun run dev # http://localhost:8787 (UI password from .dev.vars)Make it yours
src/extraction.tsβ replace the example entity dictionary (clients, products, people, systems) with your own vocabulary. This is how the graph auto-links.wrangler.jsoncβ setHARVEST_LINEAR_TEAM, your custom domain, andCF_ACCESS_TEAM_DOMAIN.scripts/seed.tsβ import your local Claude memory:bun run scripts/seed.ts <memory-dir> --author "Your Name"β review the sensitive-content report βbun run db:seed:remote.
Connect a Claude (MCP)
Add to ~/.claude.json (or a project .mcp.json):
{
"mcpServers": {
"evergreen": {
"type": "http",
"url": "https://<your-worker>/evergreen/mcp",
"headers": { "Authorization": "Bearer <token-or-MCP_SHARED_SECRET>" }
}
}
}Per-person tokens (for authorship) go in the TOKENS KV:
wrangler kv key put --binding TOKENS <token> '{"name":"Alex"}'MCP tools: ask_docs Β· generate_doc Β· check_drift Β· coverage_gaps Β· entity_brief.
License
MIT β see LICENSE.
This server cannot be installed
Maintenance
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
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/hganumpally-a360/evergreen'
If you have feedback or need assistance with the MCP directory API, please join our Discord server