Go · event-driven · AI-first · built on gnet

A ridiculously fast Go framework, built for agents

Breeze pairs a high-throughput HTTP core with a first-party Model Context Protocol server — 40 scoped tools that let an AI agent scaffold a project, generate code, verify it, and debug a live service, the same way a senior engineer would. Native WebSockets, an event bus, durable workflows, distributed tracing, JSON-RPC and OpenAPI come standard.

40
MCP tools for agents
8
scoped tool categories
14
live dashboard pages
0
external deps in core
main.go
package main

import (
	"runtime"

	"github.com/nelthaarion/breeze/v2"
	middleware "github.com/nelthaarion/breeze/v2/middlewares"
)

func main() {
	router := breeze.NewRouter()
	router.Use(middleware.RecoveryMiddleware())
	router.Use(middleware.LoggingMiddleware())

	router.Handle(breeze.GET, "/", func(ctx *breeze.Context) error {
		return ctx.JSON(map[string]string{"status": "ok"})
	})

	pool := breeze.NewEventLoopWorkerPool(runtime.NumCPU())
	app := breeze.New(router, pool)
	app.Run(3000, true) // port, multiCore
}
an agent, talking to that same process
// An agent asks a running Breeze service about itself —
// no separate observability stack, just the app answering.
$ curl -H "Authorization: Bearer $TOKEN" \
       http://127.0.0.1:2000/mcp/features

{
  "server_kind": "app-runtime",
  "granted": ["fleet", "runtime"],
  "scoped": true,
  "tools": [
    "breeze_diagnose_service",
    "breeze_get_routes",
    "breeze_get_recent_errors",
    "breeze_get_performance",
    "breeze_get_trace",
    "breeze_explain_incident"
  ]
}
Why "AI-first" isn't a slogan here

Built so an agent can be trusted with it

Most frameworks got an MCP wrapper bolted on after the fact. Breeze's toolchain — the same one behind the breeze CLI — is exposed to agents directly, with the permission model, path confinement and structured refusals worked out at the framework level, not left to whoever writes the wrapper.

Two modes, structurally separate

--mode generator carries the full toolchain — generate, plan, verify, provision. --mode app-runtime has no mutating tool registered at all, not merely a filtered one. Nothing reaches a tool that was never built.

Scoped tokens, not scoped trust

Every tool belongs to one of 8 categories — generation, introspection, planning, knowledge, verification, runtime, fleet, provisioning. A token minted for fleet,runtime cannot touch generation, and the handshake reports exactly what was granted and what exists.

Refusals an agent can act on

An out-of-scope call gets a structured tool result naming the missing capability and saying “retrying will not help” — not a generic JSON-RPC error that invites an agent to loop forever reformatting the same request.

Workspace-confined, always

Every path a tool touches is resolved through one function that rejects traversal, symlink escapes and Windows junctions — a new tool cannot forget the check because there is no second way to get a usable path.

In-process, on a live service

A deployed application can serve its own read-only MCP endpoint beside real traffic — an agent debugging production reads breeze_diagnose_service, live routes, errors and traces without a second binary.

Self-documenting for models

The same registry that renders /openapi.json renders /llms.txt — one source of facts, so a service’s model-readable index cannot drift from what it actually serves.

Everything a production service needs, none of it bolted on

One module, opt-in subpackages. Import only the subsystem you use — nothing else is on the hook for it.

What an agent actually does with it

1

Scaffold

breeze_new and breeze_generate lay down a resource, its handlers, validation and OpenAPI docs — wired, not stubbed.

2

Verify

breeze_verify_project runs the real Go toolchain inside the confined workspace — compile errors and test failures come back as structured results, not guesses.

3

Deploy

provision_service builds and starts a container with its own scoped, workspace-confined breeze-mcp inside — no host mount an agent can request its way into.

4

Debug, live

Against the running service: breeze_diagnose_service, live routes, recent errors, and — with Fleet — a distributed trace with a deterministic root cause.

See inside your app, without a second stack

Two lines wire in a 14-page live dashboard: request timeline profiling, an ORM-free query monitor, a routes explorer generated from the same declarations that produce your OpenAPI spec, and one WebSocket carrying every live update — no polling, no Grafana, no separate collector to run.

  • Request timeline — middleware, auth, cache, query, controller, serialization, one waterfall
  • Diagnostics registry every subsystem — including MCP itself — reports through
  • Fleet tracing across services: topology graph, root cause, blast radius
Tour the dashboard →
two lines
coll := dashboard.Install(app, router, dashboard.DefaultConfig())
router.Use(coll.Middleware())

// http://localhost:3000/dashboard — admin / admin

Install

Requires Go 1.25.13 or later.

go get  github.com/nelthaarion/breeze/v2

Pulls in gnet v2 for the event loop, go-json for fast marshaling, brotli for compression, and golang-jwt for authentication. Every other subsystem — including the MCP server — is an opt-in subpackage.

go install  github.com/nelthaarion/breeze/v2/cmd/breeze@latest
breeze new myapp

Documentation generated for the Breeze framework. Static site, no server required.