AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

Spikard

mcp-goldziher-spikard · by Goldziher

Codegen-first polyglot web toolkit: one Rust core, 14 language bindings, spec-driven codegen (OpenAPI, AsyncAPI, GraphQL, gRPC, SQL to HTTP) and a 13-tool MCP server. Experimental, pre-1.0, MIT.

No reviews yet
0 installs
0 views
view→install

Install

$ agentstack add mcp-goldziher-spikard

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-goldziher-spikard)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2d ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Spikard? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

One web toolkit, every language.

Codegen-first polyglot web toolkit. A Rust core plus 14 language bindings generated by alef — spec-driven codegen (OpenAPI, AsyncAPI, GraphQL, JSON-RPC, gRPC, and SQL→HTTP), type-safe routing, tower-http middleware, an MCP server for coding agents, and fixture-driven cross-language testing.

Rust core · Python · TypeScript · Ruby · PHP · Elixir · Go · Java · C# · Kotlin · Dart · Swift · Zig · WASM · C FFI

[Install](#installation) · [Why spikard](#why-spikard) · [Quick example](#quick-example) · [MCP server](#mcp-server) · Docs


> [!IMPORTANT] > spikard is experimental and pre-1.0. APIs change between releases, and not every binding is at > the same level of maturity. It is not yet recommended for production. > > That is also the invitation: this is the point where feedback actually shapes the design. If you try > it and something is wrong, awkward, or missing, please > open an issue. If you want to help, > good first issues > are scoped to be finishable in an evening, and [CONTRIBUTING.md](CONTRIBUTING.md) explains the > generated-bindings workflow.

Why spikard

| Capability | Details | |---|---| | Type-safe across bindings | HTTP routing with path, query, body, and header validation. Errors convert losslessly between languages. | | Polyglot bindings | Python, TypeScript/Node, Ruby, PHP, Elixir, Go, Java, C#, Kotlin, Dart, Swift, Zig, WASM, Rust, and C FFI. | | Schema codegen | Parse OpenAPI 3.0, AsyncAPI 3.0, GraphQL SDL, and JSON-RPC 2.0 specs. Generate handlers and validators per binding. | | SQL to HTTP codegen | Annotate SQL queries with @http GET /path, @http_auth bearer:jwt, and emit route metadata and OpenAPI specs. | | Tower middleware | Compression, rate limiting, timeouts, request IDs, JWT/API-key auth, and static file serving. | | Lifecycle hooks | onRequest, preValidation, preHandler, onResponse, and onError. | | WebSocket & SSE | Bidirectional streams and server-sent events. | | Fixture-driven testing | Shared JSON fixtures drive tests across language bindings for behavioral consistency. | | CLI & MCP server | Initialize projects, generate code, validate schemas, and integrate with MCP-compatible tools. |

Installation

Each binding ships through its native package manager.

| Target | Package | Install | | ------- | -------------------------------------- | ---------------------------------------------------- | | Rust | spikard on crates.io | cargo add spikard | | CLI | spikard-cli on crates.io | cargo install spikard-cli or cargo binstall spikard-cli | | Python | spikard on PyPI | pip install spikard | | Node.js | @spikard/node on npm | npm install @spikard/node | | WASM | @spikard/node-wasm on npm | npm install @spikard/node-wasm | | Ruby | spikard on RubyGems | gem install spikard | | PHP | goldziher/spikard on Packagist | composer require goldziher/spikard | | Elixir | spikard on Hex | Add {:spikard, "~> 0.17"} to mix.exs | | Go | github.com/Goldziher/spikard | go get github.com/Goldziher/spikard | | Java | dev.spikard:spikard on Maven Central | Maven/Gradle — see [Java README](packages/java) | | C# | Spikard on NuGet | dotnet add package Spikard | | Kotlin | dev.spikard:spikard on Maven Central | Maven/Gradle — see [Kotlin README](packages/kotlin) | | Dart | spikard on pub.dev | dart pub add spikard | | Swift | Spikard via SwiftPM | Add to Package.swift | | Zig | spikard via build.zig.zon | Add to build manifest | | C FFI | spikard-ffi shared/static library | GitHub Releases |

Quick example

Python

from spikard import Spikard
from msgspec import Struct

class User(Struct):
    id: int
    name: str

app = Spikard()

@app.get("/users/{id:int}")
async def get_user(id: int) -> User:
    return User(id=id, name="Alice")

if __name__ == "__main__":
    app.run(port=8000)

TypeScript

import { Spikard } from "@spikard/node";

const app = new Spikard();

app.get("/users/{id:int}", async (id: number) => {
  return { id, name: "Alice" };
});

app.run({ port: 8000 });

More examples (Ruby · PHP · Elixir · Go · Java · C# · Kotlin · Dart · Swift)

See the examples directory in the repository for working examples in every supported language.

MCP server

The CLI ships an MCP server so a coding agent can scaffold and generate spikard projects directly. It is enabled by default (spikard-cli feature mcp) and speaks stdio out of the box; streamable HTTP is available via the mcp-http feature.

{
  "mcpServers": {
    "spikard": {
      "command": "spikard",
      "args": ["mcp"]
    }
  }
}

Thirteen tools are exposed, covering project init, codegen from every supported spec format, the SQL→HTTP pipeline, AsyncAPI fixture and test-app generation, schema validation, and a feature summary. See the MCP documentation for the full tool list and worked flows.

SQL to HTTP

Annotate a SQL query and spikard emits the route, an OpenAPI 3.1 fragment, and a typed handler stub that calls into the generated query function:

-- @name GetUser
-- @returns :one
-- @http GET /users/{id}
-- @http_auth bearer:jwt
SELECT id, name, email FROM users WHERE id = $1;

Query parsing and type inference come from scythe; spikard reads scythe's analyzed-query IR and overlays the HTTP vocabulary on top. scythe stays library-agnostic and owns no HTTP concepts. See the SQL codegen guide.

Architecture

All bindings call a shared Rust core through thin language-native layers:

How bindings work

Language bindings (Python, Node, Ruby, Go, Java, C#...)
        |
        v
FFI / NAPI / PyO3 / Magnus / runtime bridge
        |
        v
crates/spikard-http      Router, middleware, auth
crates/spikard-core      HTTP types, validation, errors
crates/spikard-codegen   OpenAPI, GraphQL, AsyncAPI, JSON-RPC

Bindings are generated from the Rust API surface via alef. Binding code stays thin: type conversion, error conversion, and runtime integration. Business logic, validation, middleware, and codegen all live in Rust.

Specification support

  • OpenAPI 3.0 — Route definitions to specs, parameter validators, Swagger/ReDoc UI
  • GraphQL — SDL schema parsing, query execution, introspection, Handler trait integration
  • AsyncAPI 3.0 — Channel/operation extraction, message validators, WebSocket integration
  • OpenRPC — JSON-RPC 2.0 method handlers, parameter validation, batch requests

Middleware stack

Compression (gzip/brotli), rate limiting, timeouts, request IDs, authentication (JWT/API key), static files. Configured via ServerConfig structs. All middleware is implemented in Rust via tower-http.

Development

task setup     # Install dependencies
task build     # Build Rust core (debug)
task test      # Run Rust tests
task test:all  # Run all tests (Rust + bindings)
task e2e:all   # Generate + build + run e2e tests
task format    # Format all code

Run task --list for the full task catalog.

Project status

  • Experimental and pre-1.0 — see the note at the top of this README. APIs change between releases.
  • Binding packages follow the Rust crate version.
  • E2E coverage is fixture-driven and shared across supported language targets.
  • See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on modifying generated bindings.

License

MIT License — see [LICENSE](LICENSE) for details.

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.