
Research
/Security News
737 Chrome VPN Extensions Linked to Brand Impersonation and Browser Traffic Redirection
The campaign amassed more than 75,000 installs by targeting Russian-speaking users seeking access to blocked services.
@aimino/fast-html-mcp-server
Advanced tools
Five-tier MCP server for lightning-fast HTML generation from AI agents — assembly, patch, read, raw, and consistency tiers with tools, components, and templates
Five-tier MCP server for lightning-fast HTML generation from AI agents.
Assembly-Patch-Read-Raw-Consistency architecture. 15 tools, 22 components, 25 templates — purpose-built for AI-driven page creation with sub-second patch times and AI-grade token compression.
MCP name: io.github.aimino-tech/fast-html-mcp-server
npx -y @aimino/fast-html-mcp-server
Or add to your MCP client config:
{
"mcpServers": {
"fast-html-mcp-server": {
"command": "npx",
"args": ["-y", "@aimino/fast-html-mcp-server"]
}
}
}
{
"mcpServers": {
"fast-html-mcp-server": {
"command": "npx",
"args": ["-y", "@aimino/fast-html-mcp-server"]
}
}
}
{
"inputs": [],
"servers": {
"fast-html-mcp-server": {
"command": "npx",
"args": ["-y", "@aimino/fast-html-mcp-server"]
}
}
}
claude mcp add fast-html-mcp-server -e npx -a "-y" -a "@aimino/fast-html-mcp-server"
Here's a complete copy-paste workflow that builds a report page:
# 1. List available templates and components
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_templates","arguments":{}}}' | npx -y @aimino/fast-html-mcp-server
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_components","arguments":{}}}' | npx -y @aimino/fast-html-mcp-server
# 2. Render a page
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"render_page","arguments":{"template":"report","sections":[{"component":"hero","props":{"title":"Q3 Report","badge":"Draft"}},{"component":"data-table","props":{"headers":["Metric","Value"],"rows":[["Revenue","$1.2M"],["Users","45K"]]}}],"output_path":"/tmp/report.html","options":{"title":"Q3 Report"}}}}}' | npx -y @aimino/fast-html-mcp-server
# 3. Inspect the output
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"read_html","arguments":{"path":"/tmp/report.html","mode":"compressed"}}}' | npx -y @aimino/fast-html-mcp-server
All benchmarks measured from cold start (first tool call after server launch). No warmup or pre-initialization.
| Operation | Target | Actual | vs Alternatives |
|---|---|---|---|
| Cold start → first render | <3s | ~1.5s | Playwright/Puppeteer: 5-15s |
| Subsequent render_page (25 templates) | <1s | ~900ms | Handlebars/EJS render: similar |
| patch_html (typo fix on landing page) | <2s | ~800ms | Regex replace: 1-3s |
| patch_html (500KB table, 10 rows) | <5s | ~3s | parse5 full parse: 8-15s |
| patch_html (#id fast-path) | <500ms | ~200ms | JSoup/Cheerio: 2-5s |
| 5 sequential patches (same file) | <4s total | ~2s total | Re-parsing each time: 10s+ |
| set_attribute on 500KB file | <2s | ~1s | DOM parser: 3-8s |
| Compression:high (bloated HTML) | >40% reduction | 40-70% | html-minifier: 10-30% |
| Compression:ai (full report→500 tokens) | <1750 chars | ~1600 chars | Manual minification: unreliable |
| Streaming (real-time preview) | Valid HTML chunks | all chunks valid | No streaming alternative exists |
| Equity research report (10 sections) | <5s | ~3s | FinRobot (7K★): 15-30s |
Why is it faster?
patch_html and set_attribute detect #id selectors and use direct text substitution instead of full parse5 AST parsing, achieving ~10x speedup for the most common editing patternThe Document Consistency Engine (AIM-797) ensures cross-section coherence via entity-aware dependency graph propagation. All benchmarks measured from cold start.
| Sections | Pattern | Propagation | Stale Detection | File Size |
|---|---|---|---|---|
| 5 | Linear chain | 1.26 ms | 0.50 ms | 0.3 KB |
| 5 | Star (broadcast) | 2.60 ms | 0.70 ms | 0.4 KB |
| 10 | Linear chain | 5.48 ms | 1.96 ms | 0.7 KB |
| 25 | Linear chain | 6.82 ms | 2.23 ms | 1.8 KB |
| 50 | Linear chain | 7.21 ms | 2.43 ms | 3.7 KB |
| 100 | Linear chain | 8.71 ms | 5.22 ms | 7.5 KB |
| 100 | Star (broadcast) | 8.60 ms | 2.64 ms | 7.9 KB |
| 100 | Balanced DAG | 7.27 ms | 1.87 ms | 11.4 KB |
Worst case: 11.47 ms for 100-section propagation. That's ~200,000× faster than manual search-replace across 100 sections.
| Tier | Tool | Description |
|---|---|---|
| Assembly | render_page | Compose pages from structured component specs using doT.js templates |
| Patch | patch_html | Replace inner content of matched elements via CSS selectors (parse5 AST) |
| Patch | set_attribute | Set an attribute on elements matched by CSS selector |
| Read | read_html | Analyze existing HTML in three modes: structure, content, compressed |
| Raw | write_raw_html | Write raw HTML string (optionally template-wrapped) to file |
| Raw | write_html_file | Alias for write_raw_html |
| Raw | format_html | Beautify an existing HTML file in-place with js-beautify |
| Raw | preview_html | Render HTML string to a preview file without writing to disk |
| Consistency | propagate_edit | Propagate entity edit through dependency graph, auto-updating affected sections |
| Consistency | check_consistency | Audit document for stale cross-section references |
| Utility | list_components | List available components, optionally filtered by category |
| Utility | list_templates | List available templates, optionally filtered by category |
| Utility | get_template_schema | Get template metadata with available variables and defaults |
| Utility | get_component_schema | Get component schema with available props |
| Utility | register_template | Register a custom template at runtime for immediate use |
| Category | Components |
|---|---|
| Layout | header, footer, sidebar, card-deck, grid |
| Interactive | tabs, accordion |
| Data | data-table, stats-grid, timeline, financial-table, evidence-grid |
| Visual | risk-matrix, valuation-chart, prisma-flow |
| Media | figure, image-gallery |
| Utility | hero, callout, code-block, citation-block |
report, exploration, deck, code-review, design, prototyping, illustrations, research, custom-editor, minimal, documentation
invoice, budget, financial-summary, data-sheet, dashboard, financial-dashboard
newsletter, changelog, faq, meeting-notes, comparison
api-doc, landing-page, error-page
equity-research, lit-review, research-briefing, scientific-paper, journal-club, earnings-summary, industry-overview
pitch-deck
Assembly-Patch-Read-Raw (APRR) — four tiers that work together in a feedback loop:
Fast HTML MCP
├── Assembly Tier — render_page
├── Patch Tier — patch_html, set_attribute
├── Read Tier — read_html
├── Raw Tier — write_raw_html, write_html_file, format_html, preview_html
├── Consistency Tier — propagate_edit, check_consistency
└── Utilities — list_components, list_templates
list_templates + list_components + schema toolsrender_page with template + sectionsread_html to verify outputpatch_html / set_attribute → read againcheck_consistency / propagate_edit to maintain data integrity across interdependent sectionspatch_html/set_attribute detects #id selectors for direct string substitution instead of full AST parse (~10x faster for most edits)Fast HTML MCP is designed from the ground up for AI agent token budgets. All read and edit modes prioritize token efficiency through progressive disclosure.
| Mode | Tokens | vs Raw HTML | Best For |
|---|---|---|---|
| Raw HTML (baseline) | 30,553 | — | Full DOM access |
| Structure | 9,163 | 70% saved | Tree overview |
| Content | 7,991 | 74% saved | Typed blocks |
| Compressed | 3,909 | 87% saved | Summary + stats |
| Text | 1,000 | 97% saved | Token-minimal reading |
The text mode strips all HTML tags and returns only plain text — the most token-efficient way to consume HTML content. Combined with offset/limit progressive reading, agents read only what they need:
# Read just the first 1K chars (~250 tokens)
read_html(path, mode: "text", offset: 0, limit: 1000)
# Read more if needed
read_html(path, mode: "text", offset: 1000, limit: 1000)
For editing, the edit_html_range tool lets agents replace specific line ranges instead of re-sending entire element content — following the same progressive pattern as Cursor and OpenCode.
When an AI agent changes one value in a 500-line HTML file:
| Approach | Tokens Sent | Best For |
|---|---|---|
patch_html with CSS selector | ~2,396 tokens | Small, single-line targets (by id) |
edit_html_range with line range | ~48 tokens | Large containers, surgical changes |
For small edits inside large elements (e.g., fixing a value in a table cell deep in a 500-line page), edit_html_range saves 85–99% of the tool call tokens. The agent only sends the changed lines, not the complete element content.
# Fix a typo — send just the one changed line
edit_html_range(file_path: "report.html", start_line: 42, end_line: 42,
new_content: " <p>The quick brown fox jumps over the lazy dog.</p>")
# vs. patch_html which requires the entire element content
patch_html(file_path: "report.html", selector: "#content",
html: "<p>The quick brown fox jumps over the lazy dog.</p><p>Another paragraph...</p>...")
When to use which tool:
patch_html — edit a small element you can target by CSS id (selector token cost < content token cost)edit_html_range — edit inside a large element where the changed lines are small vs. the element sizeset_attribute — change a single attribute (attribute+value, fast regex path)Run the HTTP/SSE transport for remote MCP clients:
npm run build
TRANSPORT=sse PORT=3000 npm start
Or with Docker:
docker compose up --build
Endpoints: /health, /metrics, /mcp/sse, /mcp/message. Put a reverse proxy (Caddy, nginx, Cloudflare Tunnel) in front for TLS when exposing publicly.
Fast HTML MCP takes security seriously:
When self-hosting over the network, terminate TLS at your reverse proxy and restrict access (firewall, VPN, or your own auth layer).
git clone https://github.com/Aimino-Tech/fast-html-mcp-server.git
cd fast-html-mcp-server
npm install
npm run build
npm run dev # hot reload via tsx
GNU General Public License v3.0 — see LICENSE.
FAQs
Five-tier MCP server for lightning-fast HTML generation from AI agents — assembly, patch, read, raw, and consistency tiers with tools, components, and templates
We found that @aimino/fast-html-mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
The campaign amassed more than 75,000 installs by targeting Russian-speaking users seeking access to blocked services.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.