easl
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 6 GitHub stars
Code Warn
- process.env — Environment variable access in packages/mcp-server/src/index.ts
- network request — Outbound network request in packages/mcp-server/src/index.ts
- process.env — Environment variable access in packages/worker/scripts/seed-examples.ts
- network request — Outbound network request in packages/worker/scripts/seed-examples.ts
Permissions Pass
- Permissions — No dangerous permissions requested
This tool acts as an MCP server that allows AI agents to instantly publish output (like CSV, Markdown, or JSON) as interactive, shareable web pages via a single API request.
Security Assessment
Overall risk: Medium. The tool does not request dangerous system permissions, but it does make outbound network requests. Specifically, it sends your agent's output data to an external third-party API (`api.easl.dev`) to generate the shareable links. It relies on environment variables to manage configurations, which is a standard practice, and no hardcoded secrets were detected. Developers should be aware that any content processed by this tool leaves their local environment and is transmitted to an external server.
Quality Assessment
The project is relatively new and currently has low visibility with only 6 GitHub stars, meaning it has not yet undergone broad community review. However, it is covered by a permissive MIT license and appears to be actively maintained, as its most recent commit was made today. The repository includes a clear description and straightforward documentation for quick setup.
Verdict
Use with caution — the code is transparent and actively maintained, but you should avoid routing sensitive or private data through it due to its reliance on external network requests.
Instant hosting for AI agents — turn output into pages worth sharing
Turn agent output into pages worth sharing.
One API call turns a CSV into a sortable table, Markdown into styled prose, JSON into an interactive tree.
No accounts, no config, no deploy pipeline — just content in, shareable page out.
curl -X POST https://api.easl.dev/publish \
-H "Content-Type: application/json" \
-d '{"content": "# Hello World\nSome **markdown** here.", "contentType": "text/markdown"}'
# → https://warm-dawn.easl.dev
What happens
easl auto-detects your content and renders it with the right interactive viewer:
- CSV → sortable table with sticky headers and alternating rows
- Markdown → styled prose with headings, code blocks, and tables
- JSON → collapsible tree with syntax highlighting
- Mermaid → rendered diagram (flowcharts, sequence diagrams, etc.)
- SVG → sanitized, zoomable viewer
- HTML → served as-is
- PDF → embedded viewer
- Images → responsive centered viewer
8 formats. Zero config. All auto-detected.
Quick Start
For AI agents (MCP)
Add to your MCP config (Claude Desktop, Cursor, Windsurf, etc.):
{
"mcpServers": {
"easl": {
"command": "npx",
"args": ["-y", "@easl/mcp"]
}
}
}
Then just ask your agent:
"Publish this CSV as a shareable table"
"Turn this markdown into a beautiful page"
With curl
# Publish a CSV as a sortable table
curl -X POST https://api.easl.dev/publish \
-H "Content-Type: application/json" \
-d '{"content": "Name,Role\nAlice,Engineer\nBob,Designer", "contentType": "text/csv"}'
# Publish JSON as an interactive tree
curl -X POST https://api.easl.dev/publish \
-H "Content-Type: application/json" \
-d '{"content": "{\"users\": [{\"name\": \"Alice\"}, {\"name\": \"Bob\"}]}", "contentType": "application/json"}'
Supported Formats
| Format | Extensions | Rendered as |
|---|---|---|
| CSV | .csv |
Sortable table with sticky headers and alternating rows |
| Markdown | .md |
Styled prose — headings, code blocks, tables, blockquotes |
| JSON | .json |
Collapsible tree with syntax highlighting and expand/collapse all |
| HTML | .html |
Served as-is, no wrapping |
| SVG | .svg |
Sanitized, zoomable viewer (scripts stripped) |
.pdf |
Embedded iframe viewer | |
| Mermaid | .mmd |
Rendered diagram via Mermaid.js (flowcharts, sequence, etc.) |
| Images | .png .jpg .gif .webp |
Responsive centered viewer |
MCP Server
The MCP server gives AI agents first-class publishing capabilities through the Model Context Protocol.
Available Tools
| Tool | Description |
|---|---|
publish_content |
Publish raw content (string) → URL to a shareable page. The fastest path. |
publish_file |
Publish a single file from disk with auto-detected rendering. |
publish_site |
Publish a directory as a multi-page site. |
list_sites |
List sites published in the current session. |
delete_site |
Delete a published site by slug. |
Environment
| Variable | Default | Description |
|---|---|---|
EASL_API_URL |
https://api.easl.dev |
API base URL (override for self-hosted) |
REST API
Base URL: https://api.easl.dev
| Method | Endpoint | Description |
|---|---|---|
POST |
/publish |
Publish content — single-file shorthand or multi-file array |
GET |
/sites/:slug |
Get site metadata |
DELETE |
/sites/:slug |
Delete a site (requires X-Claim-Token header) |
POST |
/feedback |
Submit feedback programmatically |
Full API docs: easl.dev/docs
Architecture
easl runs on Cloudflare's edge network as a single Worker:
- Hono router handles API requests, landing page, docs, and wildcard subdomain serving
- R2 stores uploaded files
- D1 (SQLite) tracks site metadata and version history
- KV caches rendered HTML shells for fast serving
When a site is requested (e.g. warm-dawn.easl.dev), the Worker detects the file type, generates an HTML shell with the right interactive viewer, and embeds the raw data for client-side hydration.
Monorepo Structure
packages/
worker/ → Cloudflare Worker (Hono routes, smart rendering, serving)
mcp-server/ → MCP server (stdio transport, 5 tools)
Self-Hosting
Prerequisites: Node.js ≥ 20, a Cloudflare account, and wrangler.
Clone and install
git clone https://github.com/AdirAmsalem/easl.git cd easl pnpm installCreate Cloudflare resources
# Create KV namespace wrangler kv namespace create SITES_KV # Create R2 bucket wrangler r2 bucket create easl-content # Create D1 database wrangler d1 create easl-dbConfigure — Update
packages/worker/wrangler.tomlwith your resource IDs and domainInitialize the database
cd packages/worker pnpm db:migrateDeploy
pnpm deploy
Development
pnpm install # Install dependencies
pnpm dev # Start local dev server (wrangler dev)
pnpm test # Run tests
pnpm build # Build all packages
Local dev uses path-based routing instead of subdomains:
- API endpoints:
http://localhost:8787/publish,/sites - View sites:
http://localhost:8787/s/:slug - Docs:
http://localhost:8787/docs
Contributing
Contributions are welcome! Whether it's bug fixes, new viewer types, or documentation improvements.
- Fork the repo
- Create your branch (
git checkout -b my-feature) - Make your changes
- Run tests (
pnpm test) - Open a PR
Looking for a place to start? Check out the good first issues.
License
MIT
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found