Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
All notable changes to Vayl are documented here. This project adheres to
[Semantic Versioning](https://semver.org/).

## [Unreleased]
## [0.10.0] — 2026-10-22

REST routes for every tool with a generated API reference, and memory backends for Google ADK,
LlamaIndex and AutoGen. No change to the MCP tools or their arguments.

### Added
- **REST routes for every tool.** `vayl-server` serves `POST /v1/tools/<name>` (the tool's arguments
Expand Down Expand Up @@ -397,6 +400,7 @@ old, removals retract, ambiguous input is flagged, and history stays queryable
(`vayl-mcp`) or an authenticated team server (`vayl-server`). SQLite by default, optional Postgres;
encryption at rest, an Ed25519-signed tamper-evident audit chain, RBAC, and GDPR tools.

[0.10.0]: https://github.com/ac12644/vayl/releases/tag/v0.10.0
[0.9.1]: https://github.com/ac12644/vayl/releases/tag/v0.9.1
[0.9.0]: https://github.com/ac12644/vayl/releases/tag/v0.9.0
[0.8.0]: https://github.com/ac12644/vayl/releases/tag/v0.8.0
Expand Down
21 changes: 21 additions & 0 deletions docs/changelog/2026/v0.10.0-rest-api-and-memory-backends.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
description: >-
REST routes for every tool with a generated API reference, memory backends
for Google ADK, LlamaIndex and AutoGen, and setup pages for seven more clients.
icon: plug
---

# v0.10.0 — REST API and memory backends

_22 October 2026_

## Added

* **REST routes for every tool.** `vayl-server` serves `POST /v1/tools/<name>` (the tool's arguments as a JSON object, `{"result": "..."}` back) and `GET /v1/tools`, behind the same authentication and checks as `/mcp`. Errors use status codes: `401`, `403` for a missing capability or scope, `404` for an unknown tool, `422` for bad arguments. See the [HTTP API reference](https://vayl.gitbook.io/vayl-docs/api-reference).
* **An API reference generated from the code.** One typed operation per tool, with the capability it needs and a real example. A test fails if the spec drifts from the tools.
* **Memory backends for Google ADK, LlamaIndex and AutoGen.** They plug into each framework's own memory, so what the user says is stored and the current facts reach the model before each turn. Install with `pip install 'vayl-mcp[adk]'`, `[llamaindex]` or `[autogen]`. See [Agent frameworks](https://vayl.gitbook.io/vayl-docs/documentation/integrations/agent-frameworks), which also covers Pydantic AI and Agno over MCP.
* **Setup pages** for VS Code, Windsurf, Zed, Cline, Continue, Codex CLI and Gemini CLI.

No action needed to upgrade.

[Full notes on GitHub](https://github.com/ac12644/vayl/releases/tag/v0.10.0)
3 changes: 2 additions & 1 deletion docs/changelog/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ What changed in each Vayl release, newest first. Upgrade notes are on each relea

| Release | Date | Highlights |
| -------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------- |
| **v0.9.1** (current) | 22 Oct 2026 | gpt-6 support, server instructions for MCP clients, clearer model errors |
| **v0.10.0** (current) | 22 Oct 2026 | REST routes and generated API reference; memory backends for Google ADK, LlamaIndex and AutoGen |
| v0.9.1 | 22 Oct 2026 | gpt-6 support, server instructions for MCP clients, clearer model errors |
| v0.9.0 | 22 Oct 2026 | Python 3.11 minimum; listed in the official MCP Registry |
| v0.8.0 | 21 Oct 2026 | FastMCP 4 and MCP SDK v2, Python client HTTP fix, clean client shutdown |
| v0.7.0 | 27 Sep 2026 | Tenant isolation for policies, the graph, decisions, receipts, audit and principals; audit fixes |
Expand Down
1 change: 1 addition & 0 deletions docs/changelog/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

## 2026

* [v0.10.0 — REST API and memory backends](2026/v0.10.0-rest-api-and-memory-backends.md)
* [v0.9.1 — gpt-6 and server instructions](2026/v0.9.1-gpt-6-and-server-instructions.md)
* [v0.9.0 — Python 3.11 and the MCP Registry](2026/v0.9.0-python-3-11-and-mcp-registry.md)
* [v0.8.0 — FastMCP 4 and MCP SDK v2](2026/v0.8.0-fastmcp-4-and-mcp-sdk-v2.md)
Expand Down
2 changes: 1 addition & 1 deletion docs/documentation/getting-started/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ vayl-mcp --version
```

```
vayl-mcp 0.9.1
vayl-mcp 0.10.0
```

Optional extras:
Expand Down
6 changes: 3 additions & 3 deletions docs/documentation/reference/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Installing `vayl-mcp` puts five commands on your `PATH`. Two run the MCP server,
| `vayl-demo` | Offline demo of reconciliation. No keys needed. |
| `vayl-license` | Vendor-side: generate the signing keypair and mint customer licenses. |

Output below was captured from vayl 0.9.1.
Output below was captured from vayl 0.10.0.

## vayl-mcp

Expand All @@ -37,7 +37,7 @@ Configuration: environment variables, see https://vayl.gitbook.io/vayl-docs

```
$ vayl-mcp --version
vayl-mcp 0.9.1
vayl-mcp 0.10.0
```

`--help` and `--version` answer before the database is opened, so they don't create `vayl.db` in the current directory. On start, the server validates settings such as `LLM_PROVIDER` and `VAYL_LOG_FORMAT` and exits with an error naming a bad value. Logs go to stderr; stdout belongs to the MCP protocol.
Expand All @@ -62,7 +62,7 @@ Configuration: environment variables, see https://vayl.gitbook.io/vayl-docs

```
$ vayl-server --version
vayl-server 0.9.1
vayl-server 0.10.0
```

On start it prints the endpoint (the uvicorn lines go to stderr):
Expand Down
4 changes: 2 additions & 2 deletions docs/documentation/reference/http-endpoints.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Authorization beyond that (capability and scope) happens inside the tool and com

## Call a tool with curl

This session was run against a real `vayl-server` 0.9.1 on a temporary database, with the key redacted.
This session was run against a real `vayl-server` 0.10.0 on a temporary database, with the key redacted.

{% stepper %}
{% step %}
Expand Down Expand Up @@ -108,7 +108,7 @@ x-request-id: docs-demo-1
Transfer-Encoding: chunked

event: message
data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"logging":{},"prompts":{"listChanged":true},"resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"vayl","version":"0.9.1"},"instructions":"Vayl is persistent, reconciling memory. When the user asks you to remember, note or keep track of something, or states a fact or a change to one (a decision, a preference, a dose, an account setting, 'we switched to X'), call `remember` with one plain sentence: Vayl retires the old value instead of keeping both, which a notes file cannot do. Before answering from what you were told earlier (a project's stack, a customer's plan, a patient's current medication), call `recall`, with include_history=true for 'what was it before?'. Use `forget` when something is no longer true and has no replacement. If recall doesn't know, say so instead of guessing."}}
data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"logging":{},"prompts":{"listChanged":true},"resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"vayl","version":"0.10.0"},"instructions":"Vayl is persistent, reconciling memory. When the user asks you to remember, note or keep track of something, or states a fact or a change to one (a decision, a preference, a dose, an account setting, 'we switched to X'), call `remember` with one plain sentence: Vayl retires the old value instead of keeping both, which a notes file cannot do. Before answering from what you were told earlier (a project's stack, a customer's plan, a patient's current medication), call `recall`, with include_history=true for 'what was it before?'. Use `forget` when something is no longer true and has no replacement. If recall doesn't know, say so instead of guessing."}}
```

`serverInfo.version` is Vayl's version, the same as `vayl-server --version` prints. `instructions` is the guidance Vayl gives the client about when to call its tools; Claude Code shows it to the model. Because the server is stateless, you can call `tools/list` or `tools/call` without initializing first.
Expand Down
6 changes: 3 additions & 3 deletions openapi/base.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
openapi: 3.1.0
info:
title: Vayl HTTP API
version: 0.9.1
version: 0.10.0
summary: The routes served by vayl-server, the authenticated team transport for Vayl.
description: |
`vayl-server` serves Vayl's 32 tools two ways, with the same authentication and checks:
Expand Down Expand Up @@ -108,7 +108,7 @@ paths:
'200':
description: |
A server-sent-events stream. Its `data:` line is the JSON-RPC response. Captured from
vayl-server 0.9.1.
vayl-server 0.10.0.
headers:
X-Request-ID:
$ref: '#/components/headers/RequestId'
Expand All @@ -123,7 +123,7 @@ paths:
data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18",
"capabilities":{"logging":{},"prompts":{"listChanged":true},
"resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}},
"serverInfo":{"name":"vayl","version":"0.9.1"},
"serverInfo":{"name":"vayl","version":"0.10.0"},
"instructions":"Vayl is persistent, reconciling memory. When the user asks you to remember, note or keep track of something, or states a fact or a change to one (a decision, a preference, a dose, an account setting, 'we switched to X'), call `remember` with one plain sentence: Vayl retires the old value instead of keeping both, which a notes file cannot do. Before answering from what you were told earlier (a project's stack, a customer's plan, a patient's current medication), call `recall`, with include_history=true for 'what was it before?'. Use `forget` when something is no longer true and has no replacement. If recall doesn't know, say so instead of guessing."}}
toolsCall:
summary: tools/call (license_status)
Expand Down
6 changes: 3 additions & 3 deletions openapi/vayl-server.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
openapi: 3.1.0
info:
title: Vayl HTTP API
version: 0.9.1
version: 0.10.0
summary: The routes served by vayl-server, the authenticated team transport for Vayl.
description: "`vayl-server` serves Vayl's 32 tools two ways, with the same authentication and checks:\n\n- **REST:**\
\ `POST /v1/tools/{name}` with the tool's arguments as a JSON object, returning\n `{\"result\": \"...\"}`.\
Expand Down Expand Up @@ -132,7 +132,7 @@ paths:
'200':
description: 'A server-sent-events stream. Its `data:` line is the JSON-RPC response. Captured from

vayl-server 0.9.1.
vayl-server 0.10.0.

'
headers:
Expand All @@ -146,7 +146,7 @@ paths:
initialize:
summary: initialize
value: 'data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18", "capabilities":{"logging":{},"prompts":{"listChanged":true},
"resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}}, "serverInfo":{"name":"vayl","version":"0.9.1"},
"resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}}, "serverInfo":{"name":"vayl","version":"0.10.0"},
"instructions":"Vayl is persistent, reconciling memory. When the user asks you to remember,
note or keep track of something, or states a fact or a change to one (a decision, a preference,
a dose, an account setting, ''we switched to X''), call `remember` with one plain sentence:
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "vayl-mcp"
version = "0.9.1"
version = "0.10.0"
description = "The reconciling memory layer for AI agents, over MCP: when a fact changes, the old value is retired and kept in history."
readme = "README.md"
requires-python = ">=3.11"
Expand Down
4 changes: 2 additions & 2 deletions server.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
"source": "github"
},
"websiteUrl": "https://vayl.gitbook.io/vayl-docs",
"version": "0.9.1",
"version": "0.10.0",
"packages": [
{
"registryType": "pypi",
"identifier": "vayl-mcp",
"version": "0.9.1",
"version": "0.10.0",
"transport": {
"type": "stdio"
},
Expand Down
2 changes: 1 addition & 1 deletion src/vayl/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""Vayl — reconciling memory for AI agents."""
from vayl.client import Vayl, VaylError

__version__ = "0.9.1"
__version__ = "0.10.0"
__all__ = ["Vayl", "VaylError"]
Loading