# Spikard

> 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.

- **Type:** MCP server
- **Install:** `agentstack add mcp-goldziher-spikard`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Goldziher](https://agentstack.voostack.com/s/goldziher)
- **Installs:** 0
- **Category:** [Databases](https://agentstack.voostack.com/c/databases)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Goldziher](https://github.com/Goldziher)
- **Source:** https://github.com/Goldziher/spikard
- **Website:** https://spikard.dev

## Install

```sh
agentstack add mcp-goldziher-spikard
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## 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](https://spikard.dev)

---

> [!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](https://github.com/Goldziher/spikard/issues). If you want to help,
> [good first issues](https://github.com/Goldziher/spikard/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
> 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](https://github.com/Goldziher/spikard/releases) |

## Quick example

### Python

```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

```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](https://github.com/Goldziher/spikard/tree/main/crates/spikard-http/examples) in the repository for working examples in every supported language.

## MCP server

The CLI ships an [MCP](https://modelcontextprotocol.io) 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.

```json
{
  "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](https://spikard.dev/mcp/) 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:

```sql
-- @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](https://github.com/Goldziher/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](https://spikard.dev/guides/sql-codegen/).

## Architecture

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

How bindings work

```text
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](https://github.com/xberg-io/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

```bash
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.

- **Author:** [Goldziher](https://github.com/Goldziher)
- **Source:** [Goldziher/spikard](https://github.com/Goldziher/spikard)
- **License:** MIT
- **Homepage:** https://spikard.dev

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

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-goldziher-spikard
- Seller: https://agentstack.voostack.com/s/goldziher
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
