Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
33658ab
feat(redis): add redix_opts for SSL/TLS support (#59)
emilwojtaszek Nov 24, 2025
5309d12
deps:(deps): bump redix from 1.5.2 to 1.5.3 (#63)
dependabot[bot] Nov 25, 2025
46da35a
deps:(deps-dev): bump mimic from 2.1.1 to 2.2.0 (#62)
dependabot[bot] Nov 25, 2025
218c9db
deps:(deps): bump plug from 1.18.1 to 1.19.0 (#70)
dependabot[bot] Dec 8, 2025
733a298
deps:(deps-dev): bump styler from 1.9.1 to 1.10.0 (#69)
dependabot[bot] Dec 8, 2025
a268ae7
deps:(deps-dev): bump ex_doc from 0.39.1 to 0.39.2 (#68)
dependabot[bot] Dec 8, 2025
09b872f
fix: redix should be loaded (#71)
zoedsoupe Dec 9, 2025
87ab226
deps:(deps-dev): bump credo from 1.7.13 to 1.7.14 (#65)
dependabot[bot] Dec 9, 2025
03465e3
chore: release 0.17.0 (#61)
zoedsoupe Dec 9, 2025
83dc23e
deps:(deps-dev): bump ex_doc from 0.39.2 to 0.39.3 (#75)
dependabot[bot] Dec 21, 2025
90e68a5
deps:(deps): bump plug from 1.19.0 to 1.19.1 (#74)
dependabot[bot] Dec 21, 2025
cfdf788
deps:(deps-dev): bump styler from 1.10.0 to 1.10.1 (#80)
dependabot[bot] Jan 19, 2026
f250cc6
deps:(deps-dev): bump credo from 1.7.14 to 1.7.15 (#78)
dependabot[bot] Jan 19, 2026
fa4bd7d
deps:(deps-dev): bump mimic from 2.2.0 to 2.3.0 (#84)
dependabot[bot] Jan 20, 2026
10fe59d
deps:(deps-dev): bump ex_doc from 0.39.3 to 0.40.0 (#86)
dependabot[bot] Jan 27, 2026
2074ed6
deps:(deps): bump finch from 0.20.0 to 0.21.0 (#85)
dependabot[bot] Jan 27, 2026
5a61c65
✨ fix(stdio): hide console window on windows (#91)
matteing Feb 26, 2026
c7985dd
deps:(deps-dev): bump ex_doc from 0.40.0 to 0.40.1 (#87)
dependabot[bot] Feb 28, 2026
e1dc705
Fix: Check Process.alive? before sending to SSE handler (#82)
mellelieuwes Feb 28, 2026
05a2362
refactor(phase-1): abstract protocol version negotiation (#93)
zoedsoupe Feb 28, 2026
105d6a9
refactor(phase-2): transport layer as functions, backward compatible …
zoedsoupe Feb 28, 2026
9993dab
chore: release 0.17.1 (#94)
zoedsoupe Feb 28, 2026
badb0f0
refactor(phase-3)!: server re-implementation and simplification (#96)
zoedsoupe Feb 28, 2026
08b98c0
refactor(phase-4): client extraction of handlers (#100)
zoedsoupe Mar 2, 2026
cb8f367
deps:(deps-dev): bump styler from 1.10.1 to 1.11.0 (#101)
dependabot[bot] Mar 5, 2026
6f41027
deps:(deps): bump telemetry from 1.3.0 to 1.4.1 (#106)
dependabot[bot] Mar 10, 2026
7df9c0d
deps:(deps-dev): bump credo from 1.7.15 to 1.7.17 (#105)
dependabot[bot] Mar 10, 2026
89c5405
Fix memory leak by preventing stale SSE unregister dropping active he…
nighthawk Mar 13, 2026
6ac49d1
feat: add _meta support to Tool struct and JSON encoder (#108)
sglyon Mar 13, 2026
efee54a
Fix misleading session store warning when disabled (#107)
IvanIvanoff Mar 13, 2026
eea86af
fix(phase-5): remove dead code and update docs (#104)
zoedsoupe Mar 16, 2026
c3c01e9
Fix: Start SSE keepalive when first handler is registered (#83)
dgilperez Mar 16, 2026
1f9f13c
fix!: remove client base module and client macro (#110)
zoedsoupe Mar 16, 2026
b331281
fix: stdio server transport working (#111)
zoedsoupe Mar 16, 2026
cb8c0e3
fix: session serializion errors (#112)
zoedsoupe Mar 16, 2026
944bafb
fix: server examples and sse server transport
zoedsoupe Mar 16, 2026
85f8ebb
fix: regression for input/output server schema
zoedsoupe Mar 16, 2026
dc584a7
chore: release 1.0.0 (#97)
zoedsoupe Mar 16, 2026
ae2560a
docs: correct supervision tree setup (#118)
devtayls Apr 3, 2026
04e3a68
deps:(deps-dev): bump credo from 1.7.17 to 1.7.18 (#126)
dependabot[bot] Apr 13, 2026
8103b7c
feat: add instructions field to initialize response (#122)
azsuth Apr 13, 2026
94d566a
Auto-reinitialize expired sessions for non-initialize requests (#125)
jarlah Apr 13, 2026
4c48647
feat: Add Client.await_ready/2 to block until MCP handshake completes…
nighthawk Apr 13, 2026
da93c8c
chore: release 1.1.0 (#119)
zoedsoupe Apr 13, 2026
eff7f24
fix: buffer chunked STDIO responses before decoding in client (#127)
nighthawk Apr 21, 2026
602d74c
chore: encapsulate transport_parse_state into the Client.State struct
zoedsoupe Apr 22, 2026
05565fc
chore: suppress SSE deprecation warnings
zoedsoupe Apr 22, 2026
fbcca0a
chore: capture log from stdio transports processes
zoedsoupe Apr 22, 2026
8334779
chore: supress SSE deprecation warnings
zoedsoupe Apr 22, 2026
76d7ecd
test: fix the stdio cast message from server using a buffer
zoedsoupe Apr 22, 2026
c47c0c2
chore: release 1.1.1 (#129)
zoedsoupe Apr 22, 2026
6958036
Fix/streamable http accept header 120 (#121)
devtayls Apr 22, 2026
3a34382
fix: correct SSE task lifecycle bugs in StreamableHTTP transport (#130)
zoedsoupe Apr 22, 2026
f961fa0
fix: prevent lost SSE responses when client connection closes (#132)
zoedsoupe Apr 22, 2026
0a1aadc
feat: pluggable session supervisor and :via tuple session naming (#133)
zoedsoupe Apr 24, 2026
fc9444c
fix: replace opaque KeyError with ArgumentError for missing :client_i…
zoedsoupe Apr 24, 2026
a42f462
fix: handle session expiry gracefully with optional callback and stor…
zoedsoupe Apr 24, 2026
4b567d9
fix: server stdio test againts custom io device (#136)
zoedsoupe Apr 24, 2026
ad29215
fix: defer streamable_http plug opts fetching to runtime (#137)
zoedsoupe Apr 24, 2026
2b092a5
chore: release 1.2.0 (#131)
zoedsoupe Apr 24, 2026
6a81e27
deps:(deps): bump peri from 0.6.2 to 0.7.0 (#138)
dependabot[bot] Apr 27, 2026
8ab36e2
feat(elicitation): MCP 2025-06-18 elicitation support (#139)
zoedsoupe Apr 27, 2026
aaee374
feat: resource templates with RFC 6570 URI matching (#141)
zoedsoupe Apr 28, 2026
5593006
fix: scope POST-with-SSE response to originating conn (#144)
zoedsoupe Apr 29, 2026
c12deaa
chore: release 1.3.0 (#140)
zoedsoupe Apr 29, 2026
f8dbc43
fix: log sse_keepalive_failed at :warning, matching sse_send_failed (…
epd Apr 30, 2026
f77a844
chore: change setup-zig version on ci
zoedsoupe Apr 30, 2026
9c674fd
refactor: delegate JSON Schema to Peri, retire :mcp_field (#146)
zoedsoupe May 4, 2026
485ff4a
chore: release 1.3.1 (#147)
zoedsoupe May 4, 2026
e5a86f5
test: cut suite from 62s to 8s (#149)
zoedsoupe May 4, 2026
10a09cf
feat: add resource subscription capability implementation (#152)
devtayls May 8, 2026
f0496b4
feat: dispatch session requests in supervised tasks (#153)
zoedsoupe May 8, 2026
6462ec5
deps:(deps): bump peri from 0.8.3 to 0.8.4 (#151)
dependabot[bot] May 8, 2026
cd33058
chore: release 1.4.0 (#150)
zoedsoupe May 8, 2026
1e368b9
fix: drop compile-connected deps from component/1 macro (#154)
zoedsoupe May 9, 2026
939fd76
ci: fix flaky test
zoedsoupe May 9, 2026
51348f1
feat: MCP Tasks (2025-11-25) — server-receiver for tools/call (#98) (…
zoedsoupe May 9, 2026
a846f53
chore: release 1.5.0 (#156)
zoedsoupe May 9, 2026
512e103
feat: add Registry.PG for distributed session tracking via :pg (#160)
ceolinrenato May 15, 2026
a12a8f6
feat: add OAuth 2.1 authorization for MCP servers (#158)
zoedsoupe May 18, 2026
c8dfee0
chore: release 1.6.0 (#162)
zoedsoupe May 18, 2026
226b71e
fix: Echo request id in "Server not initialized" error (#168)
arianvassili May 23, 2026
d21e8f5
deps:(deps-dev): bump ex_doc from 0.40.1 to 0.40.2 (#163)
dependabot[bot] May 23, 2026
6fa33d6
deps:(deps): bump plug from 1.19.1 to 1.19.2 (#164)
dependabot[bot] May 23, 2026
d269004
deps:(deps): bump finch from 0.21.0 to 0.22.0 (#165)
dependabot[bot] May 23, 2026
d990cd8
deps:(deps): bump telemetry from 1.4.1 to 1.4.2 (#167)
dependabot[bot] May 23, 2026
4fcd14f
deps:(deps): bump gun from 2.2.0 to 2.3.0 (#166)
dependabot[bot] May 23, 2026
457ee76
chore: release 1.6.1 (#169)
zoedsoupe May 23, 2026
af4ccdc
fix(streamable_http): restore session from store on notif/resp regist…
mariamaman Jul 15, 2026
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
2 changes: 1 addition & 1 deletion .github/.release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.16.0"
".": "1.6.1"
}
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ jobs:
mix deps.get

- name: Install Zig
uses: goto-bus-stop/setup-zig@v2
uses: mlugg/setup-zig@v2
with:
version: 0.14.1
version: 0.15.2

- name: Install XZ
run: sudo apt-get update && sudo apt-get install -y xz-utils
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ result
/.lexical/
/.expert/
/.elixir-tools/
.dexter.*

# macOS
**/.DS_Store
Expand Down
180 changes: 177 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,191 @@

All notable changes to this project are documented in this file.

## [0.16.0](https://github.com/zoedsoupe/anubis-mcp/compare/v0.15.0...v0.16.0) (2025-11-18)
## [1.6.1](https://github.com/zoedsoupe/anubis-mcp/compare/v1.6.0...v1.6.1) (2026-05-23)


### Bug Fixes

* Echo request id in "Server not initialized" error ([#168](https://github.com/zoedsoupe/anubis-mcp/issues/168)) ([226b71e](https://github.com/zoedsoupe/anubis-mcp/commit/226b71ef92bd90216d79cd4998636b147763bf4b))

## [1.6.0](https://github.com/zoedsoupe/anubis-mcp/compare/v1.5.0...v1.6.0) (2026-05-18)


### Features

* add OAuth 2.1 authorization for MCP servers ([#158](https://github.com/zoedsoupe/anubis-mcp/issues/158)) ([a12a8f6](https://github.com/zoedsoupe/anubis-mcp/commit/a12a8f6ba9db8498a212f566898b66c99631993e))
* add Registry.PG for distributed session tracking via :pg ([#160](https://github.com/zoedsoupe/anubis-mcp/issues/160)) ([512e103](https://github.com/zoedsoupe/anubis-mcp/commit/512e1033aa6f868b33658395e6fe1f0e28c8faf8))

## [1.5.0](https://github.com/zoedsoupe/anubis-mcp/compare/v1.4.0...v1.5.0) (2026-05-09)


### Features

* MCP Tasks (2025-11-25) — server-receiver for tools/call ([#98](https://github.com/zoedsoupe/anubis-mcp/issues/98)) ([#155](https://github.com/zoedsoupe/anubis-mcp/issues/155)) ([51348f1](https://github.com/zoedsoupe/anubis-mcp/commit/51348f1a6e2b069fbe91c1cd50ce4610303de393))


### Bug Fixes

* drop compile-connected deps from component/1 macro ([#154](https://github.com/zoedsoupe/anubis-mcp/issues/154)) ([1e368b9](https://github.com/zoedsoupe/anubis-mcp/commit/1e368b906092b863362737a90f83ae5a35fd078f))


### Continuous Integration

* fix flaky test ([939fd76](https://github.com/zoedsoupe/anubis-mcp/commit/939fd769813a85170e3b59153a4b8e7f5804150e))

## [1.4.0](https://github.com/zoedsoupe/anubis-mcp/compare/v1.3.1...v1.4.0) (2026-05-08)


### Features

* add resource subscription capability implementation ([#152](https://github.com/zoedsoupe/anubis-mcp/issues/152)) ([10a09cf](https://github.com/zoedsoupe/anubis-mcp/commit/10a09cf89ffbd26651138c74961c442b6257cc40))
* dispatch session requests in supervised tasks ([#153](https://github.com/zoedsoupe/anubis-mcp/issues/153)) ([f0496b4](https://github.com/zoedsoupe/anubis-mcp/commit/f0496b41a40eb6fabd4e015ec3f0ed35575efd44))


### Tests

* cut suite from 62s to 8s ([#149](https://github.com/zoedsoupe/anubis-mcp/issues/149)) ([e5a86f5](https://github.com/zoedsoupe/anubis-mcp/commit/e5a86f592778b85d790a9ca41e577b56a2b3744d))

## [1.3.1](https://github.com/zoedsoupe/anubis-mcp/compare/v1.3.0...v1.3.1) (2026-05-04)


### Bug Fixes

* log sse_keepalive_failed at :warning, matching sse_send_failed ([#145](https://github.com/zoedsoupe/anubis-mcp/issues/145)) ([f8dbc43](https://github.com/zoedsoupe/anubis-mcp/commit/f8dbc43e2fc0fd9debd5851aebcb31ab459459bd))


### Miscellaneous Chores

* change setup-zig version on ci ([f77a844](https://github.com/zoedsoupe/anubis-mcp/commit/f77a844cd0c706db3240f1c655a7277969940244))


### Code Refactoring

* delegate JSON Schema to Peri, retire :mcp_field ([#146](https://github.com/zoedsoupe/anubis-mcp/issues/146)) ([9c674fd](https://github.com/zoedsoupe/anubis-mcp/commit/9c674fd44499a3a0c6ed271748ec7fb44fb4c914))

## [1.3.0](https://github.com/zoedsoupe/anubis-mcp/compare/v1.2.0...v1.3.0) (2026-04-29)


### Features

* **elicitation:** MCP 2025-06-18 elicitation support ([#139](https://github.com/zoedsoupe/anubis-mcp/issues/139)) ([8ab36e2](https://github.com/zoedsoupe/anubis-mcp/commit/8ab36e2f051984a9dc841e7f97e58542e5746800))
* resource templates with RFC 6570 URI matching ([#141](https://github.com/zoedsoupe/anubis-mcp/issues/141)) ([aaee374](https://github.com/zoedsoupe/anubis-mcp/commit/aaee37489887cd8725821a73b80f71ad21c626e2))


### Bug Fixes

* scope POST-with-SSE response to originating conn ([#144](https://github.com/zoedsoupe/anubis-mcp/issues/144)) ([5593006](https://github.com/zoedsoupe/anubis-mcp/commit/5593006ce6bbdcd9e6ce74aff1820247c807a463))

## [1.2.0](https://github.com/zoedsoupe/anubis-mcp/compare/v1.1.1...v1.2.0) (2026-04-24)


### Features

* pluggable session supervisor and :via tuple session naming ([#133](https://github.com/zoedsoupe/anubis-mcp/issues/133)) ([0a1aadc](https://github.com/zoedsoupe/anubis-mcp/commit/0a1aadc3b00be036980920a2c0e0a8ce55d2b392))


### Bug Fixes

* correct SSE task lifecycle bugs in StreamableHTTP transport ([#130](https://github.com/zoedsoupe/anubis-mcp/issues/130)) ([3a34382](https://github.com/zoedsoupe/anubis-mcp/commit/3a343828f3d6974fdbdeb9ab1589b9a52a56ad4f))
* defer streamable_http plug opts fetching to runtime ([#137](https://github.com/zoedsoupe/anubis-mcp/issues/137)) ([ad29215](https://github.com/zoedsoupe/anubis-mcp/commit/ad2921549529eac26488bdcf7be5c876c548e618))
* handle session expiry gracefully with optional callback and store restore ([#134](https://github.com/zoedsoupe/anubis-mcp/issues/134)) ([a42f462](https://github.com/zoedsoupe/anubis-mcp/commit/a42f4625f466ea46a490014d82c11ab8fde042dc))
* prevent lost SSE responses when client connection closes ([#132](https://github.com/zoedsoupe/anubis-mcp/issues/132)) ([f961fa0](https://github.com/zoedsoupe/anubis-mcp/commit/f961fa0719d795eeb2a629ae5764cbb8b29a4c1b))
* replace opaque KeyError with ArgumentError for missing :client_info ([#135](https://github.com/zoedsoupe/anubis-mcp/issues/135)) ([fc9444c](https://github.com/zoedsoupe/anubis-mcp/commit/fc9444cdab045e0275570dfb4f0ff6dcf1a42eb0))
* server stdio test againts custom io device ([#136](https://github.com/zoedsoupe/anubis-mcp/issues/136)) ([4b567d9](https://github.com/zoedsoupe/anubis-mcp/commit/4b567d99fa1dced884ddc89b6798a540e643ba2c))

## [1.1.1](https://github.com/zoedsoupe/anubis-mcp/compare/v1.1.0...v1.1.1) (2026-04-22)


### Bug Fixes

* buffer chunked STDIO responses before decoding in client ([#127](https://github.com/zoedsoupe/anubis-mcp/issues/127)) ([eff7f24](https://github.com/zoedsoupe/anubis-mcp/commit/eff7f248084077e081d57122648963a1ab24e35e))


### Miscellaneous Chores

* capture log from stdio transports processes ([fbcca0a](https://github.com/zoedsoupe/anubis-mcp/commit/fbcca0a1204e4e1602d8abe277af03f067338d10))
* encapsulate transport_parse_state into the Client.State struct ([602d74c](https://github.com/zoedsoupe/anubis-mcp/commit/602d74c7045e3087db4424ba55d61cfcf2c7f663))
* suppress SSE deprecation warnings ([05565fc](https://github.com/zoedsoupe/anubis-mcp/commit/05565fc030c449909bbdcb72d67773b9edefea9c))
* supress SSE deprecation warnings ([8334779](https://github.com/zoedsoupe/anubis-mcp/commit/833477912037a02972fff410aa646c9df7059f09))


### Tests

* fix the stdio cast message from server using a buffer ([76d7ecd](https://github.com/zoedsoupe/anubis-mcp/commit/76d7ecd52d8fc469615f4febe151d0cda11b3713))

## [1.1.0](https://github.com/zoedsoupe/anubis-mcp/compare/v1.0.0...v1.1.0) (2026-04-13)


### Features

* Add Client.await_ready/2 to block until MCP handshake completes ([#117](https://github.com/zoedsoupe/anubis-mcp/issues/117)) ([4c48647](https://github.com/zoedsoupe/anubis-mcp/commit/4c48647192c3304e012049669729008d7177940e))
* add instructions field to initialize response ([#122](https://github.com/zoedsoupe/anubis-mcp/issues/122)) ([8103b7c](https://github.com/zoedsoupe/anubis-mcp/commit/8103b7c5cbc12ace1e302edd059e42c0a04618f1))


### Documentation

* correct supervision tree setup ([#118](https://github.com/zoedsoupe/anubis-mcp/issues/118)) ([ae2560a](https://github.com/zoedsoupe/anubis-mcp/commit/ae2560a8a7fd85847557ac21fc978e15dc5f7995))

## [1.0.0](https://github.com/zoedsoupe/anubis-mcp/compare/v0.17.1...v1.0.0) (2026-03-16)


### ⚠ BREAKING CHANGES

* remove client base module and client macro ([#110](https://github.com/zoedsoupe/anubis-mcp/issues/110))
* **phase-3:** server re-implementation and simplification ([#96](https://github.com/zoedsoupe/anubis-mcp/issues/96))

### Features

* add _meta support to Tool struct and JSON encoder ([#108](https://github.com/zoedsoupe/anubis-mcp/issues/108)) ([6ac49d1](https://github.com/zoedsoupe/anubis-mcp/commit/6ac49d181baed767defe9fc5138c6d41caa26f20))


### Bug Fixes

* **phase-5:** remove dead code and update docs ([#104](https://github.com/zoedsoupe/anubis-mcp/issues/104)) ([eea86af](https://github.com/zoedsoupe/anubis-mcp/commit/eea86af23dcb805a7770894c6a6a897700c38dfe))
* regression for input/output server schema ([85f8ebb](https://github.com/zoedsoupe/anubis-mcp/commit/85f8ebb7439c51ab5cb0df974e08720833f534e9))
* remove client base module and client macro ([#110](https://github.com/zoedsoupe/anubis-mcp/issues/110)) ([1f9f13c](https://github.com/zoedsoupe/anubis-mcp/commit/1f9f13cf2c44294391dd580030a1210dcd349fd5))
* server examples and sse server transport ([944bafb](https://github.com/zoedsoupe/anubis-mcp/commit/944bafb01c29afa36a82eddc81c6e1c6d0278a9c))
* session serializion errors ([#112](https://github.com/zoedsoupe/anubis-mcp/issues/112)) ([cb8c0e3](https://github.com/zoedsoupe/anubis-mcp/commit/cb8c0e31ad831484425e378951a85591c8cbf29f)), closes [#60](https://github.com/zoedsoupe/anubis-mcp/issues/60)
* Start SSE keepalive when first handler is registered ([#83](https://github.com/zoedsoupe/anubis-mcp/issues/83)) ([c3c01e9](https://github.com/zoedsoupe/anubis-mcp/commit/c3c01e975f57ef421783f963adf717b522b5c724))
* stdio server transport working ([#111](https://github.com/zoedsoupe/anubis-mcp/issues/111)) ([b331281](https://github.com/zoedsoupe/anubis-mcp/commit/b33128172db3f4ec3766cb4c7125f83bc3a85dd7))


### Code Refactoring

* **phase-3:** server re-implementation and simplification ([#96](https://github.com/zoedsoupe/anubis-mcp/issues/96)) ([badb0f0](https://github.com/zoedsoupe/anubis-mcp/commit/badb0f0111521f8bd5a5dba32574c25e1b589c91))
* **phase-4:** client extraction of handlers ([#100](https://github.com/zoedsoupe/anubis-mcp/issues/100)) ([08b98c0](https://github.com/zoedsoupe/anubis-mcp/commit/08b98c03e50d698a781507ee63a4a6c5f8cdcb5e))

## [0.17.1](https://github.com/zoedsoupe/anubis-mcp/compare/v0.17.0...v0.17.1) (2026-02-28)

### Bug Fixes

- Check Process.alive? before sending to SSE handler ([#82](https://github.com/zoedsoupe/anubis-mcp/issues/82)) ([e1dc705](https://github.com/zoedsoupe/anubis-mcp/commit/e1dc705f1ae8ee7e8670d26c7fdfc30583d19efd))

### Code Refactoring

- **phase-1:** abstract protocol version negotiation ([#93](https://github.com/zoedsoupe/anubis-mcp/issues/93)) ([05a2362](https://github.com/zoedsoupe/anubis-mcp/commit/05a2362a672ef462e73bc9a3f637c3f203c0978e))
- **phase-2:** transport layer as functions, backward compatible ([#95](https://github.com/zoedsoupe/anubis-mcp/issues/95)) ([105d6a9](https://github.com/zoedsoupe/anubis-mcp/commit/105d6a91e31d8dbf606ec7916317f9add94acf4e))

## [0.17.0](https://github.com/zoedsoupe/anubis-mcp/compare/v0.16.0...v0.17.0) (2025-12-09)

### Features

* redis based session store (continue from [#48](https://github.com/zoedsoupe/anubis-mcp/issues/48)) ([#55](https://github.com/zoedsoupe/anubis-mcp/issues/55)) ([fddea32](https://github.com/zoedsoupe/anubis-mcp/commit/fddea327ef8d91c57c4dc65f527aadc3e8d105a2))
- **redis:** add redix_opts for SSL/TLS support ([#59](https://github.com/zoedsoupe/anubis-mcp/issues/59)) ([33658ab](https://github.com/zoedsoupe/anubis-mcp/commit/33658abab69e1f0c361a4dbf4e9665bb900d2f7e))

### Bug Fixes

- added server component description/0 callback ([#58](https://github.com/zoedsoupe/anubis-mcp/issues/58)) ([a094473](https://github.com/zoedsoupe/anubis-mcp/commit/a094473916f7ac414369bb2faab1593fd141a7f1))
- redix should be loaded ([#71](https://github.com/zoedsoupe/anubis-mcp/issues/71)) ([09b872f](https://github.com/zoedsoupe/anubis-mcp/commit/09b872fe5dc48665beee3be8a7b7ae9943ce48ae))

## [0.16.0](https://github.com/zoedsoupe/anubis-mcp/compare/v0.15.0...v0.16.0) (2025-11-18)

### Features

- redis based session store (continue from [#48](https://github.com/zoedsoupe/anubis-mcp/issues/48)) ([#55](https://github.com/zoedsoupe/anubis-mcp/issues/55)) ([fddea32](https://github.com/zoedsoupe/anubis-mcp/commit/fddea327ef8d91c57c4dc65f527aadc3e8d105a2))

### Bug Fixes

* correct arguments in Logging.should_log? ([#47](https://github.com/zoedsoupe/anubis-mcp/issues/47)) ([6f550e6](https://github.com/zoedsoupe/anubis-mcp/commit/6f550e647fd5e6e7c6cdfb233e1cc8a4ac530fc7))
- correct arguments in Logging.should_log? ([#47](https://github.com/zoedsoupe/anubis-mcp/issues/47)) ([6f550e6](https://github.com/zoedsoupe/anubis-mcp/commit/6f550e647fd5e6e7c6cdfb233e1cc8a4ac530fc7))

## [0.15.0](https://github.com/zoedsoupe/anubis-mcp/compare/v0.14.1...v0.15.0) (2025-11-03)

Expand Down
1 change: 0 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,4 +136,3 @@ mix docs
### Testing Guidelines

- Always implement test helper modules in @test/support/ context, analyzing if there aren't any existing ones that could be used
- memo
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,4 @@ Releases are managed by the maintainers. Version numbers follow [Semantic Versio

## License

By contributing to Anubis MCP, you agree that your contributions will be licensed under the project's [MIT License](./LICENSE).
By contributing to Anubis MCP, you agree that your contributions will be licensed under the project's [LGPL-v3 License](./LICENSE).
61 changes: 31 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Anubis MCP is a comprehensive Elixir SDK for the [Model Context Protocol](https:
```elixir
def deps do
[
{:anubis_mcp, "~> 0.16.0"} # x-release-please-version
{:anubis_mcp, "~> 1.6.1"} # x-release-please-version
]
end
```
Expand All @@ -26,37 +26,43 @@ end
### Server

```elixir
# Define a server with tools capabilities
# Define a tool as a Component (compile-time registration)
defmodule MyApp.Echo do
@moduledoc "Echoes everything the user says to the LLM"

use Anubis.Server.Component, type: :tool

alias Anubis.Server.Response

schema do
field :text, :string, required: true, max_length: 150, description: "the text to be echoed"
end

@impl true
def execute(%{text: text}, frame) do
{:reply, Response.text(Response.tool(), text), frame}
end
end

defmodule MyApp.MCPServer do
use Anubis.Server,
name: "My Server",
version: "1.0.0",
capabilities: [:tools]

@impl true
# this callback will be called when the
# MCP initialize lifecycle completes
def init(_client_info, frame) do
{:ok,frame
|> assign(counter: 0)
|> register_tool("echo",
input_schema: %{
text: {:required, :string, max: 150, description: "the text to be echoed"}
},
annotations: %{read_only: true},
description: "echoes everything the user says to the LLM") }
end
# Static component registration — dispatches to MyApp.Echo.execute/2
component MyApp.Echo

@impl true
def handle_tool("echo", %{text: text}, frame) do
Logger.info("This tool was called #{frame.assigns.counter + 1}")
{:reply, text, assign(frame, counter: frame.assigns.counter + 1)}
def init(_client_info, frame) do
# You can also register tools dynamically at runtime via the Frame:
# frame = register_tool(frame, "dynamic_tool", description: "...", input_schema: %{...})
{:ok, frame}
end
end

# Add to your application supervisor
children = [
Anubis.Server.Registry,
{MyApp.MCPServer, transport: :streamable_http}
]

Expand All @@ -72,22 +78,17 @@ Now you can achieve your MCP server on `http://localhost:<port>/mcp`
### Client

```elixir
# Define a client module
defmodule MyApp.MCPClient do
use Anubis.Client,
name: "MyApp",
version: "1.0.0",
protocol_version: "2025-03-26"
end

# Add to your application supervisor
children = [
{MyApp.MCPClient,
transport: {:streamable_http, base_url: "http://localhost:4000"}}
{Anubis.Client,
name: MyApp.MCPClient,
transport: {:streamable_http, base_url: "http://localhost:4000"},
client_info: %{"name" => "MyApp", "version" => "1.0.0"},
protocol_version: "2025-06-18"}
]

# Use the client
{:ok, result} = MyApp.MCPClient.call_tool("echo", %{text: "this will be echoed!"})
{:ok, result} = Anubis.Client.call_tool(MyApp.MCPClient, "echo", %{text: "this will be echoed!"})
```

## Why Anubis?
Expand Down
2 changes: 2 additions & 0 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,5 @@ config :logger, :default_formatter,
# ttl: 1800, # TTL is in ms
# namespace: "anubis:sessions",
# connection_name: :anubis_redis

if config_env() != :prod, do: import_config("#{config_env()}.exs")
7 changes: 7 additions & 0 deletions config/test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import Config

# Suppress logs that escape ExUnit's per-test capture (e.g. supervisor
# `terminate/2` callbacks running after the test process finishes). Tests that
# need to assert on log content should still use `capture_log/1`, which
# overrides this floor for its scope.
config :logger, level: :warning
Loading
Loading