You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by pi...@apache.org on 2025/07/22 10:02:46 UTC
(iggy) branch mcp updated (cc734ecd -> f8ecd6b2)
This is an automated email from the ASF dual-hosted git repository.
piotr pushed a change to branch mcp
in repository https://gitbox.apache.org/repos/asf/iggy.git
discard cc734ecd complete mcp
new f8ecd6b2 complete mcp
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (cc734ecd)
\
N -- N -- N refs/heads/mcp (f8ecd6b2)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.convco | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(iggy) 01/01: complete mcp
Posted by pi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
piotr pushed a commit to branch mcp
in repository https://gitbox.apache.org/repos/asf/iggy.git
commit f8ecd6b245fa5259e8a3864705b1b1c84579c4c2
Author: spetz <pi...@gmail.com>
AuthorDate: Tue Jul 22 12:02:02 2025 +0200
complete mcp
---
.convco | 2 +-
DEPENDENCIES.md | 123 ++++++++++++++++++----------------
core/ai/README.md | 2 +
core/ai/mcp/README.md | 59 +++++++++++++++-
core/ai/mcp/config.toml | 2 +-
core/ai/mcp/src/service/mod.rs | 18 ++---
core/integration/tests/mcp/mod.rs | 137 +++++++++++++++++++++++++++++++++++++-
7 files changed, 272 insertions(+), 71 deletions(-)
diff --git a/.convco b/.convco
index 507d7885..2f7fc2cc 100644
--- a/.convco
+++ b/.convco
@@ -1 +1 @@
-scopeRegex: "(ci|sdk|server|connectors|cli|bench|misc|docs|io_uring|test|repo|deps|deps-dev)(,(ci|sdk|server|connectors|cli|bench|misc|docs|io_uring|test|repo|deps|deps-dev))*"
+scopeRegex: "(ci|sdk|server|connectors|cli|bench|misc|mcp|docs|io_uring|test|repo|deps|deps-dev)(,(ci|sdk|server|connectors|cli|bench|misc|mcp|docs|io_uring|test|repo|deps|deps-dev))*"
diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
index c209b573..f79fa585 100644
--- a/DEPENDENCIES.md
+++ b/DEPENDENCIES.md
@@ -39,7 +39,7 @@ arrayref: 0.3.9, "BSD-2-Clause",
arrayvec: 0.7.6, "Apache-2.0 OR MIT",
assert_cmd: 2.0.17, "Apache-2.0 OR MIT",
async-broadcast: 0.7.2, "Apache-2.0 OR MIT",
-async-compression: 0.4.25, "Apache-2.0 OR MIT",
+async-compression: 0.4.27, "Apache-2.0 OR MIT",
async-dropper: 0.3.1, "MIT",
async-dropper-derive: 0.3.1, "MIT",
async-dropper-simple: 0.2.6, "MIT",
@@ -56,8 +56,8 @@ atomic-waker: 1.1.2, "Apache-2.0 OR MIT",
attohttpc: 0.28.5, "MPL-2.0",
autocfg: 1.5.0, "Apache-2.0 OR MIT",
aws-creds: 0.38.0, "MIT",
-aws-lc-rs: 1.13.1, "ISC AND (Apache-2.0 OR ISC)",
-aws-lc-sys: 0.29.0, "ISC AND (Apache-2.0 OR ISC) AND OpenSSL",
+aws-lc-rs: 1.13.2, "ISC AND (Apache-2.0 OR ISC)",
+aws-lc-sys: 0.30.0, "ISC AND (Apache-2.0 OR ISC) AND OpenSSL",
aws-region: 0.26.0, "MIT",
axum: 0.7.9, "MIT",
axum: 0.8.4, "MIT",
@@ -86,15 +86,15 @@ bitvec: 1.0.1, "MIT",
blake3: 1.8.2, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR CC0-1.0",
block-buffer: 0.10.4, "Apache-2.0 OR MIT",
blowfish: 0.9.1, "Apache-2.0 OR MIT",
-bon: 3.6.4, "Apache-2.0 OR MIT",
-bon-macros: 3.6.4, "Apache-2.0 OR MIT",
+bon: 3.6.5, "Apache-2.0 OR MIT",
+bon-macros: 3.6.5, "Apache-2.0 OR MIT",
boolinator: 2.4.0, "Apache-2.0 OR MIT",
borsh: 1.5.7, "Apache-2.0 OR MIT",
borsh-derive: 1.5.7, "Apache-2.0",
brotli: 8.0.1, "BSD-3-Clause AND MIT",
brotli-decompressor: 5.0.0, "BSD-3-Clause OR MIT",
bstr: 1.12.0, "Apache-2.0 OR MIT",
-bumpalo: 3.18.1, "Apache-2.0 OR MIT",
+bumpalo: 3.19.0, "Apache-2.0 OR MIT",
byte-unit: 5.1.6, "MIT",
bytecheck: 0.6.12, "MIT",
bytecheck_derive: 0.6.12, "MIT",
@@ -103,14 +103,12 @@ bytemuck: 1.23.1, "Apache-2.0 OR MIT OR Zlib",
byteorder: 1.5.0, "MIT OR Unlicense",
bytes: 1.10.1, "MIT",
bytestring: 1.4.0, "Apache-2.0 OR MIT",
-bzip2: 0.5.2, "Apache-2.0 OR MIT",
bzip2: 0.6.0, "Apache-2.0 OR MIT",
-bzip2-sys: 0.1.13+1.0.8, "Apache-2.0 OR MIT",
camino: 1.1.10, "Apache-2.0 OR MIT",
cargo-platform: 0.1.9, "Apache-2.0 OR MIT",
cargo_metadata: 0.19.2, "MIT",
-castaway: 0.2.3, "MIT",
-cc: 1.2.27, "Apache-2.0 OR MIT",
+castaway: 0.2.4, "MIT",
+cc: 1.2.30, "Apache-2.0 OR MIT",
cesu8: 1.1.0, "Apache-2.0 OR MIT",
cexpr: 0.6.0, "Apache-2.0 OR MIT",
cfg-if: 1.0.1, "Apache-2.0 OR MIT",
@@ -120,20 +118,20 @@ charming_macros: 0.1.0, "Apache-2.0 OR MIT",
chrono: 0.4.41, "Apache-2.0 OR MIT",
cipher: 0.4.4, "Apache-2.0 OR MIT",
clang-sys: 1.8.1, "Apache-2.0",
-clap: 4.5.40, "Apache-2.0 OR MIT",
-clap_builder: 4.5.40, "Apache-2.0 OR MIT",
-clap_complete: 4.5.54, "Apache-2.0 OR MIT",
-clap_derive: 4.5.40, "Apache-2.0 OR MIT",
+clap: 4.5.41, "Apache-2.0 OR MIT",
+clap_builder: 4.5.41, "Apache-2.0 OR MIT",
+clap_complete: 4.5.55, "Apache-2.0 OR MIT",
+clap_derive: 4.5.41, "Apache-2.0 OR MIT",
clap_lex: 0.7.5, "Apache-2.0 OR MIT",
cmake: 0.1.54, "Apache-2.0 OR MIT",
-cobs: 0.2.3, "Apache-2.0 OR MIT",
+cobs: 0.3.0, "Apache-2.0 OR MIT",
colorchoice: 1.0.4, "Apache-2.0 OR MIT",
colored: 3.0.0, "MPL-2.0",
combine: 4.6.7, "MIT",
comfy-table: 7.1.4, "MIT",
compact_str: 0.7.1, "MIT",
concurrent-queue: 2.5.0, "Apache-2.0 OR MIT",
-config: 0.15.11, "Apache-2.0 OR MIT",
+config: 0.15.13, "Apache-2.0 OR MIT",
console: 0.15.11, "MIT",
console-api: 0.8.1, "MIT",
console-subscriber: 0.4.1, "MIT",
@@ -151,7 +149,7 @@ core-foundation-sys: 0.8.7, "Apache-2.0 OR MIT",
cpufeatures: 0.2.17, "Apache-2.0 OR MIT",
crc: 3.3.0, "Apache-2.0 OR MIT",
crc-catalog: 2.4.0, "Apache-2.0 OR MIT",
-crc32fast: 1.4.2, "Apache-2.0 OR MIT",
+crc32fast: 1.5.0, "Apache-2.0 OR MIT",
critical-section: 1.2.0, "Apache-2.0 OR MIT",
crossbeam: 0.8.4, "Apache-2.0 OR MIT",
crossbeam-channel: 0.5.15, "Apache-2.0 OR MIT",
@@ -161,7 +159,7 @@ crossbeam-queue: 0.3.12, "Apache-2.0 OR MIT",
crossbeam-utils: 0.8.21, "Apache-2.0 OR MIT",
crossterm: 0.28.1, "MIT",
crossterm_winapi: 0.9.1, "MIT",
-crunchy: 0.2.3, "MIT",
+crunchy: 0.2.4, "MIT",
crypto-common: 0.1.6, "Apache-2.0 OR MIT",
ctor: 0.4.2, "Apache-2.0 OR MIT",
ctor-proc-macro: 0.0.5, "Apache-2.0 OR MIT",
@@ -170,8 +168,11 @@ cucumber: 0.21.1, "Apache-2.0 OR MIT",
cucumber-codegen: 0.21.1, "Apache-2.0 OR MIT",
cucumber-expressions: 0.3.0, "Apache-2.0 OR MIT",
darling: 0.20.11, "MIT",
+darling: 0.21.0, "MIT",
darling_core: 0.20.11, "MIT",
+darling_core: 0.21.0, "MIT",
darling_macro: 0.20.11, "MIT",
+darling_macro: 0.21.0, "MIT",
dashmap: 6.1.0, "MIT",
dbus: 0.9.7, "Apache-2.0 OR MIT",
dbus-secret-service: 4.0.3, "Apache-2.0 OR MIT",
@@ -228,9 +229,8 @@ fastbloom: 0.9.0, "Apache-2.0 OR MIT",
fastrand: 2.3.0, "Apache-2.0 OR MIT",
figlet-rs: 0.1.5, "Apache-2.0",
figment: 0.10.19, "Apache-2.0 OR MIT",
-file-operation: 0.5.12, "MIT",
-filetime: 0.2.25, "Apache-2.0 OR MIT",
-flatbuffers: 24.12.23, "Apache-2.0",
+file-operation: 0.5.16, "MIT",
+flatbuffers: 25.2.10, "Apache-2.0",
flate2: 1.1.2, "Apache-2.0 OR MIT",
float-cmp: 0.10.0, "MIT",
flume: 0.11.1, "Apache-2.0 OR MIT",
@@ -296,8 +296,8 @@ gloo-worker: 0.4.0, "Apache-2.0 OR MIT",
gloo-worker: 0.5.0, "Apache-2.0 OR MIT",
gloo-worker-macros: 0.1.0, "Apache-2.0 OR MIT",
governor: 0.10.0, "MIT",
-h2: 0.3.26, "MIT",
-h2: 0.4.10, "MIT",
+h2: 0.3.27, "MIT",
+h2: 0.4.11, "MIT",
halfbrown: 0.3.0, "Apache-2.0 OR MIT",
handlebars: 6.3.2, "MIT",
hash32: 0.2.1, "Apache-2.0 OR MIT",
@@ -327,7 +327,7 @@ humantime: 2.2.0, "Apache-2.0 OR MIT",
hyper: 1.6.0, "MIT",
hyper-rustls: 0.27.7, "Apache-2.0 OR ISC OR MIT",
hyper-timeout: 0.5.2, "Apache-2.0 OR MIT",
-hyper-util: 0.1.14, "MIT",
+hyper-util: 0.1.15, "MIT",
iana-time-zone: 0.1.63, "Apache-2.0 OR MIT",
iana-time-zone-haiku: 0.1.2, "Apache-2.0 OR MIT",
icu_collections: 2.0.0, "Unicode-3.0",
@@ -359,7 +359,7 @@ impl-more: 0.1.9, "Apache-2.0 OR MIT",
implicit-clone: 0.4.9, "Apache-2.0 OR MIT",
implicit-clone-derive: 0.1.2, "Apache-2.0 OR MIT",
indexmap: 1.9.3, "Apache-2.0 OR MIT",
-indexmap: 2.9.0, "Apache-2.0 OR MIT",
+indexmap: 2.10.0, "Apache-2.0 OR MIT",
indices: 0.3.6, "Apache-2.0",
inflections: 1.1.1, "MIT",
inlinable_string: 0.1.15, "Apache-2.0 OR MIT",
@@ -369,6 +369,7 @@ inout: 0.1.4, "Apache-2.0 OR MIT",
instant: 0.1.13, "BSD-3-Clause",
integration: 0.0.1, "Apache-2.0",
inventory: 0.3.20, "Apache-2.0 OR MIT",
+io-uring: 0.7.8, "Apache-2.0 OR MIT",
ipnet: 2.11.0, "Apache-2.0 OR MIT",
iri-string: 0.7.8, "Apache-2.0 OR MIT",
is_terminal_polyfill: 1.70.1, "Apache-2.0 OR MIT",
@@ -404,7 +405,7 @@ liblzma: 0.4.2, "Apache-2.0 OR MIT",
liblzma-sys: 0.4.4, "Apache-2.0 OR MIT",
libm: 0.2.15, "MIT",
libmimalloc-sys: 0.1.43, "MIT",
-libredox: 0.1.3, "MIT",
+libredox: 0.1.6, "MIT",
libsqlite3-sys: 0.30.1, "MIT",
libyml: 0.0.5, "MIT",
libz-rs-sys: 0.5.1, "Zlib",
@@ -451,7 +452,7 @@ nom_locate: 4.2.0, "MIT",
nonzero_ext: 0.3.0, "Apache-2.0",
nonzero_lit: 0.1.2, "Apache-2.0 OR CC0-1.0 OR MIT",
normalize-line-endings: 0.3.0, "Apache-2.0",
-notify: 8.0.0, "CC0-1.0",
+notify: 8.1.0, "CC0-1.0",
notify-types: 2.0.0, "Apache-2.0 OR MIT",
nougat: 0.2.4, "Apache-2.0 OR MIT OR Zlib",
nougat-proc_macros: 0.2.4, "Apache-2.0 OR MIT OR Zlib",
@@ -480,7 +481,7 @@ opaque-debug: 0.3.1, "Apache-2.0 OR MIT",
openssl: 0.10.73, "Apache-2.0",
openssl-macros: 0.1.1, "Apache-2.0 OR MIT",
openssl-probe: 0.1.6, "Apache-2.0 OR MIT",
-openssl-src: 300.5.0+3.5.0, "Apache-2.0 OR MIT",
+openssl-src: 300.5.1+3.5.1, "Apache-2.0 OR MIT",
openssl-sys: 0.9.109, "MIT",
opentelemetry: 0.30.0, "Apache-2.0",
opentelemetry-appender-tracing: 0.30.1, "Apache-2.0",
@@ -525,9 +526,10 @@ polonius-the-crab: 0.2.1, "Apache-2.0 OR MIT OR Zlib",
polyval: 0.6.2, "Apache-2.0 OR MIT",
portable-atomic: 1.11.1, "Apache-2.0 OR MIT",
portable-atomic-util: 0.2.4, "Apache-2.0 OR MIT",
-postcard: 1.1.1, "Apache-2.0 OR MIT",
+postcard: 1.1.2, "Apache-2.0 OR MIT",
potential_utf: 0.1.2, "Unicode-3.0",
powerfmt: 0.2.0, "Apache-2.0 OR MIT",
+ppmd-rust: 1.2.1, "CC0-1.0",
ppv-lite86: 0.2.21, "Apache-2.0 OR MIT",
predicates: 3.1.3, "Apache-2.0 OR MIT",
predicates-core: 1.0.9, "Apache-2.0 OR MIT",
@@ -543,11 +545,14 @@ prokio: 0.1.0, "Apache-2.0 OR MIT",
prometheus-client: 0.23.1, "Apache-2.0 OR MIT",
prometheus-client-derive-encode: 0.4.2, "Apache-2.0 OR MIT",
prost: 0.13.5, "Apache-2.0",
+prost: 0.14.1, "Apache-2.0",
prost-derive: 0.13.5, "Apache-2.0",
-prost-reflect: 0.15.3, "Apache-2.0 OR MIT",
+prost-derive: 0.14.1, "Apache-2.0",
+prost-reflect: 0.16.0, "Apache-2.0 OR MIT",
prost-types: 0.13.5, "Apache-2.0",
-protox: 0.8.0, "Apache-2.0 OR MIT",
-protox-parse: 0.8.0, "Apache-2.0 OR MIT",
+prost-types: 0.14.1, "Apache-2.0",
+protox: 0.9.0, "Apache-2.0 OR MIT",
+protox-parse: 0.9.0, "Apache-2.0 OR MIT",
ptr_meta: 0.1.4, "MIT",
ptr_meta_derive: 0.1.4, "MIT",
quanta: 0.12.6, "MIT",
@@ -560,7 +565,7 @@ quote: 1.0.40, "Apache-2.0 OR MIT",
r-efi: 5.3.0, "Apache-2.0 OR LGPL-2.1-or-later OR MIT",
radium: 0.7.0, "MIT",
rand: 0.8.5, "Apache-2.0 OR MIT",
-rand: 0.9.1, "Apache-2.0 OR MIT",
+rand: 0.9.2, "Apache-2.0 OR MIT",
rand_chacha: 0.3.1, "Apache-2.0 OR MIT",
rand_chacha: 0.9.0, "Apache-2.0 OR MIT",
rand_core: 0.6.4, "Apache-2.0 OR MIT",
@@ -568,9 +573,9 @@ rand_core: 0.9.3, "Apache-2.0 OR MIT",
raw-cpuid: 11.5.0, "MIT",
rayon: 1.10.0, "Apache-2.0 OR MIT",
rayon-core: 1.12.1, "Apache-2.0 OR MIT",
-rcgen: 0.13.2, "Apache-2.0 OR MIT",
+rcgen: 0.14.3, "Apache-2.0 OR MIT",
redox_syscall: 0.2.16, "MIT",
-redox_syscall: 0.5.13, "MIT",
+redox_syscall: 0.5.15, "MIT",
redox_users: 0.5.0, "MIT",
ref-cast: 1.0.24, "Apache-2.0 OR MIT",
ref-cast-impl: 1.0.24, "Apache-2.0 OR MIT",
@@ -582,19 +587,19 @@ regex-syntax: 0.6.29, "Apache-2.0 OR MIT",
regex-syntax: 0.7.5, "Apache-2.0 OR MIT",
regex-syntax: 0.8.5, "Apache-2.0 OR MIT",
rend: 0.4.2, "MIT",
-reqwest: 0.12.20, "Apache-2.0 OR MIT",
+reqwest: 0.12.22, "Apache-2.0 OR MIT",
reqwest-middleware: 0.4.2, "Apache-2.0 OR MIT",
reqwest-retry: 0.7.0, "Apache-2.0 OR MIT",
retry-policies: 0.4.0, "Apache-2.0 OR MIT",
ring: 0.17.14, "Apache-2.0 AND ISC",
rkyv: 0.7.45, "MIT",
rkyv_derive: 0.7.45, "MIT",
-rmcp: 0.2.1, "Apache-2.0 OR MIT",
-rmcp-macros: 0.2.1, "Apache-2.0 OR MIT",
+rmcp: 0.3.0, "Apache-2.0 OR MIT",
+rmcp-macros: 0.3.0, "Apache-2.0 OR MIT",
ron: 0.8.1, "Apache-2.0 OR MIT",
route-recognizer: 0.3.1, "MIT",
rsa: 0.9.8, "Apache-2.0 OR MIT",
-rust-ini: 0.21.1, "MIT",
+rust-ini: 0.21.2, "MIT",
rust-s3: 0.36.0-beta.2, "MIT",
rust_decimal: 1.37.2, "MIT",
rustc-demangle: 0.1.25, "Apache-2.0 OR MIT",
@@ -602,14 +607,14 @@ rustc-hash: 1.1.0, "Apache-2.0 OR MIT",
rustc-hash: 2.1.1, "Apache-2.0 OR MIT",
rustc_version: 0.4.1, "Apache-2.0 OR MIT",
rustix: 0.38.44, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-rustix: 1.0.7, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-rustls: 0.23.28, "Apache-2.0 OR ISC OR MIT",
+rustix: 1.0.8, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
+rustls: 0.23.29, "Apache-2.0 OR ISC OR MIT",
rustls-native-certs: 0.8.1, "Apache-2.0 OR ISC OR MIT",
rustls-pemfile: 2.2.0, "Apache-2.0 OR ISC OR MIT",
rustls-pki-types: 1.12.0, "Apache-2.0 OR MIT",
rustls-platform-verifier: 0.5.3, "Apache-2.0 OR MIT",
rustls-platform-verifier-android: 0.1.1, "Apache-2.0 OR MIT",
-rustls-webpki: 0.103.3, "ISC",
+rustls-webpki: 0.103.4, "ISC",
rustversion: 1.0.21, "Apache-2.0 OR MIT",
rxml: 0.11.1, "MIT",
rxml_validation: 0.11.0, "MIT",
@@ -618,12 +623,12 @@ safe_arch: 0.7.4, "Apache-2.0 OR MIT OR Zlib",
same-file: 1.0.6, "MIT OR Unlicense",
scc: 2.3.4, "Apache-2.0",
schannel: 0.1.27, "MIT",
-schemars: 0.8.22, "MIT",
schemars: 0.9.0, "MIT",
-schemars_derive: 0.8.22, "MIT",
+schemars: 1.0.4, "MIT",
+schemars_derive: 1.0.4, "MIT",
scoped-tls: 1.0.1, "Apache-2.0 OR MIT",
scopeguard: 1.2.0, "Apache-2.0 OR MIT",
-sdd: 3.0.8, "Apache-2.0",
+sdd: 3.0.10, "Apache-2.0",
seahash: 4.1.0, "MIT",
sealed: 0.5.0, "Apache-2.0 OR MIT",
secrecy: 0.10.3, "Apache-2.0 OR MIT",
@@ -635,12 +640,13 @@ serde-wasm-bindgen: 0.5.0, "MIT",
serde-wasm-bindgen: 0.6.5, "MIT",
serde_derive: 1.0.219, "Apache-2.0 OR MIT",
serde_derive_internals: 0.29.1, "Apache-2.0 OR MIT",
-serde_json: 1.0.140, "Apache-2.0 OR MIT",
+serde_json: 1.0.141, "Apache-2.0 OR MIT",
serde_path_to_error: 0.1.17, "Apache-2.0 OR MIT",
serde_spanned: 0.6.9, "Apache-2.0 OR MIT",
+serde_spanned: 1.0.0, "Apache-2.0 OR MIT",
serde_urlencoded: 0.7.1, "Apache-2.0 OR MIT",
-serde_with: 3.13.0, "Apache-2.0 OR MIT",
-serde_with_macros: 3.13.0, "Apache-2.0 OR MIT",
+serde_with: 3.14.0, "Apache-2.0 OR MIT",
+serde_with_macros: 3.14.0, "Apache-2.0 OR MIT",
serde_yml: 0.0.12, "Apache-2.0 OR MIT",
serial_test: 3.2.0, "MIT",
serial_test_derive: 3.2.0, "MIT",
@@ -679,8 +685,8 @@ static-toml: 1.3.0, "MIT",
static_assertions: 1.1.0, "Apache-2.0 OR MIT",
stringprep: 0.1.5, "Apache-2.0 OR MIT",
strsim: 0.11.1, "MIT",
-strum: 0.27.1, "MIT",
-strum_macros: 0.27.1, "MIT",
+strum: 0.27.2, "MIT",
+strum_macros: 0.27.2, "MIT",
subtle: 2.6.1, "BSD-3-Clause",
syn: 1.0.109, "Apache-2.0 OR MIT",
syn: 2.0.104, "Apache-2.0 OR MIT",
@@ -690,7 +696,7 @@ synthez: 0.3.1, "BlueOak-1.0.0",
synthez-codegen: 0.3.1, "BlueOak-1.0.0",
synthez-core: 0.3.1, "BlueOak-1.0.0",
sysinfo: 0.34.2, "MIT",
-sysinfo: 0.35.2, "MIT",
+sysinfo: 0.36.1, "MIT",
tagptr: 0.2.0, "Apache-2.0 OR MIT",
tap: 1.0.1, "MIT",
tempfile: 3.20.0, "Apache-2.0 OR MIT",
@@ -712,16 +718,20 @@ tiny-keccak: 2.0.2, "CC0-1.0",
tinystr: 0.8.1, "Unicode-3.0",
tinyvec: 1.9.0, "Apache-2.0 OR MIT OR Zlib",
tinyvec_macros: 0.1.1, "Apache-2.0 OR MIT OR Zlib",
-tokio: 1.45.1, "MIT",
+tokio: 1.46.1, "MIT",
tokio-macros: 2.5.0, "MIT",
tokio-rustls: 0.26.2, "Apache-2.0 OR MIT",
tokio-stream: 0.1.17, "MIT",
tokio-util: 0.7.15, "MIT",
toml: 0.8.23, "Apache-2.0 OR MIT",
+toml: 0.9.2, "Apache-2.0 OR MIT",
toml_datetime: 0.6.11, "Apache-2.0 OR MIT",
+toml_datetime: 0.7.0, "Apache-2.0 OR MIT",
toml_edit: 0.19.15, "Apache-2.0 OR MIT",
toml_edit: 0.22.27, "Apache-2.0 OR MIT",
+toml_parser: 1.0.1, "Apache-2.0 OR MIT",
toml_write: 0.1.2, "Apache-2.0 OR MIT",
+toml_writer: 1.0.2, "Apache-2.0 OR MIT",
tonic: 0.12.3, "MIT",
tonic: 0.13.1, "MIT",
tools: 0.1.0, "Apache-2.0",
@@ -738,7 +748,6 @@ tracing-log: 0.2.0, "MIT",
tracing-opentelemetry: 0.31.0, "MIT",
tracing-subscriber: 0.3.19, "MIT",
trait-variant: 0.1.2, "Apache-2.0 OR MIT",
-trim-in-place: 0.1.7, "MIT",
try-lock: 0.2.5, "MIT",
twox-hash: 2.1.1, "MIT",
typed-builder: 0.15.2, "Apache-2.0 OR MIT",
@@ -792,9 +801,9 @@ wasm-timer: 0.2.5, "MIT",
web-sys: 0.3.77, "Apache-2.0 OR MIT",
web-time: 1.1.0, "Apache-2.0 OR MIT",
webpki-root-certs: 0.26.11, "CDLA-Permissive-2.0",
-webpki-root-certs: 1.0.1, "CDLA-Permissive-2.0",
+webpki-root-certs: 1.0.2, "CDLA-Permissive-2.0",
webpki-roots: 0.26.11, "CDLA-Permissive-2.0",
-webpki-roots: 1.0.1, "CDLA-Permissive-2.0",
+webpki-roots: 1.0.2, "CDLA-Permissive-2.0",
which: 4.4.2, "MIT",
whoami: 1.6.0, "Apache-2.0 OR BSL-1.0 OR MIT",
wide: 0.7.33, "Apache-2.0 OR MIT OR Zlib",
@@ -858,7 +867,7 @@ windows_x86_64_msvc: 0.48.5, "Apache-2.0 OR MIT",
windows_x86_64_msvc: 0.52.6, "Apache-2.0 OR MIT",
windows_x86_64_msvc: 0.53.0, "Apache-2.0 OR MIT",
winnow: 0.5.40, "MIT",
-winnow: 0.7.11, "MIT",
+winnow: 0.7.12, "MIT",
wit-bindgen-rt: 0.39.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
writeable: 0.6.1, "Unicode-3.0",
wyz: 0.5.1, "MIT",
@@ -881,7 +890,7 @@ zeroize_derive: 1.4.2, "Apache-2.0 OR MIT",
zerotrie: 0.2.2, "Unicode-3.0",
zerovec: 0.11.2, "Unicode-3.0",
zerovec-derive: 0.11.1, "Unicode-3.0",
-zip: 4.2.0, "MIT",
+zip: 4.3.0, "MIT",
zlib-rs: 0.5.1, "Zlib",
zopfli: 0.8.2, "Apache-2.0",
zstd: 0.13.3, "MIT",
diff --git a/core/ai/README.md b/core/ai/README.md
index e8f06e6d..c87875ab 100644
--- a/core/ai/README.md
+++ b/core/ai/README.md
@@ -1,3 +1,5 @@
# Apache Iggy AI
This module contains the AI-related components of the Apache Iggy message streaming infrastructure.
+
+Please check the **[MCP Server](https://github.com/apache/iggy/tree/master/core/ai/mcp)** for the details about Iggy MCP (Model Context Protocol) server.
diff --git a/core/ai/mcp/README.md b/core/ai/mcp/README.md
index c8af1619..c09f3fb4 100644
--- a/core/ai/mcp/README.md
+++ b/core/ai/mcp/README.md
@@ -1,3 +1,60 @@
# Apache Iggy MCP Server
-The Model Context Protocol (MCP) is an open protocol that standardizes how applications provide context to LLMs. The Apache Iggy MCP Server is an implementation of the MCP protocol for the message streaming infrastructure.
+The [Model Context Protocol](https://modelcontextprotocol.io) (MCP) is an open protocol that standardizes how applications provide context to LLMs. The Apache Iggy MCP Server is an implementation of the MCP protocol for the message streaming infrastructure.
+
+To start the MCP server, simply run `cargo run --bin iggy-mcp`.
+
+The minimal viable configuration requires at least the Iggy credentials, to create the connection with the running Iggy server with which the MCP server will communicate. You can choose between HTTP and STDIO transports (e.g. for the local usage with tools such as [Claude Desktop](https://claude.ai/download) choose `stdio`).
+
+```toml
+transport = "stdio" # http or stdio are supported
+
+[iggy]
+address = "localhost:8090"
+username = "iggy"
+password = "iggy"
+# token = "secret" # Personal Access Token (PAT) can be used instead of username and password
+# consumer = "iggy-mcp" # Optional consumer name
+
+[http] # Optional HTTP API configuration
+address = "127.0.0.1:8082"
+path = "/mcp"
+
+[http.cors] # Optional CORS configuration for HTTP API
+enabled = false
+allowed_methods = ["GET", "POST", "PUT", "DELETE"]
+allowed_origins = ["*"]
+allowed_headers = ["content-type"]
+exposed_headers = [""]
+allow_credentials = false
+allow_private_network = false
+
+[http.tls] # Optional TLS configuration for HTTP API
+enabled = false
+cert = "core/certs/iggy_cert.pem"
+key = "core/certs/iggy_key.pem"
+
+[permissions]
+create = true
+read = true
+update = true
+delete = true
+```
+
+Keep in mind that either of `toml`, `yaml`, or `json` formats are supported for the configuration file. The path to the configuration can be overriden by `IGGY_MCP_CONFIG_PATH` environment variable. Each configuration section can be also additionally updated by using the following convention `IGGY_MCP_SECTION_NAME.KEY_NAME` e.g. `IGGY_MCP_IGGY_USERNAME` and so on.
+
+Here's the example configuration to be used with Claude Desktop;
+
+```json
+{
+ "mcpServers": {
+ "iggy": {
+ "command": "/path/to/iggy-mcp",
+ "args": [],
+ "env": {
+ "IGGY_MCP_TRANSPORT": "stdio"
+ }
+ }
+ }
+}
+```
diff --git a/core/ai/mcp/config.toml b/core/ai/mcp/config.toml
index 280edf30..357502cd 100644
--- a/core/ai/mcp/config.toml
+++ b/core/ai/mcp/config.toml
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-transport = "stdio" # http or stdio are supported
+transport = "http" # http or stdio are supported
[http] # Optional HTTP API configuration
address = "127.0.0.1:8082"
diff --git a/core/ai/mcp/src/service/mod.rs b/core/ai/mcp/src/service/mod.rs
index 87c8252e..109adee7 100644
--- a/core/ai/mcp/src/service/mod.rs
+++ b/core/ai/mcp/src/service/mod.rs
@@ -693,6 +693,15 @@ impl IggyService {
)
}
+ #[tool(description = "Delete user")]
+ pub async fn delete_user(
+ &self,
+ Parameters(DeleteUser { user_id }): Parameters<DeleteUser>,
+ ) -> Result<CallToolResult, ErrorData> {
+ self.permissions.ensure_delete()?;
+ request(self.client.delete_user(&id(&user_id)?).await)
+ }
+
#[tool(description = "Update permissions")]
pub async fn update_permissions(
&self,
@@ -710,15 +719,6 @@ impl IggyService {
)
}
- #[tool(description = "Delete user")]
- pub async fn delete_user(
- &self,
- Parameters(DeleteUser { user_id }): Parameters<DeleteUser>,
- ) -> Result<CallToolResult, ErrorData> {
- self.permissions.ensure_delete()?;
- request(self.client.delete_user(&id(&user_id)?).await)
- }
-
#[tool(description = "Change password")]
pub async fn change_password(
&self,
diff --git a/core/integration/tests/mcp/mod.rs b/core/integration/tests/mcp/mod.rs
index 3994138e..ba98ef0a 100644
--- a/core/integration/tests/mcp/mod.rs
+++ b/core/integration/tests/mcp/mod.rs
@@ -18,12 +18,15 @@
use iggy::prelude::{Client, DEFAULT_ROOT_PASSWORD, DEFAULT_ROOT_USERNAME, IggyClient};
use iggy_binary_protocol::{
- ConsumerGroupClient, ConsumerOffsetClient, MessageClient, StreamClient, TopicClient,
+ ConsumerGroupClient, ConsumerOffsetClient, MessageClient, PersonalAccessTokenClient,
+ StreamClient, TopicClient, UserClient,
};
use iggy_common::{
ClientInfo, ClientInfoDetails, Consumer, ConsumerGroup, ConsumerGroupDetails,
ConsumerOffsetInfo, Identifier, IggyExpiry, IggyMessage, MaxTopicSize, Partitioning,
- PolledMessages, Snapshot, Stats, Stream, StreamDetails, Topic, TopicDetails,
+ PersonalAccessTokenExpiry, PersonalAccessTokenInfo, PolledMessages, RawPersonalAccessToken,
+ Snapshot, Stats, Stream, StreamDetails, Topic, TopicDetails, UserInfo, UserInfoDetails,
+ UserStatus,
};
use integration::{
test_mcp_server::{CONSUMER_NAME, McpClient, TestMcpServer},
@@ -41,6 +44,9 @@ const STREAM_NAME: &str = "test_stream";
const TOPIC_NAME: &str = "test_topic";
const MESSAGE_PAYLOAD: &str = "test_message";
const CONSUMER_GROUP_NAME: &str = "test_consumer_group";
+const PERSONAL_ACCESS_TOKEN_NAME: &str = "test_personal_access_token";
+const USER_NAME: &str = "test_user";
+const USER_PASSWORD: &str = "secret";
lazy_static! {
static ref STREAM_ID: Identifier =
@@ -369,6 +375,120 @@ async fn mcp_server_should_delete_consumer_offset() {
.await;
}
+#[tokio::test]
+async fn mcp_server_should_return_personal_access_tokens() {
+ assert_response::<Vec<PersonalAccessTokenInfo>>("get_personal_access_tokens", None, |tokens| {
+ assert_eq!(tokens.len(), 1);
+ assert_eq!(tokens[0].name, PERSONAL_ACCESS_TOKEN_NAME);
+ })
+ .await;
+}
+
+#[tokio::test]
+async fn mcp_server_should_create_personal_access_token() {
+ let name = "test_token";
+ let expiry = PersonalAccessTokenExpiry::NeverExpire.to_string();
+ assert_response::<RawPersonalAccessToken>(
+ "create_personal_access_token",
+ Some(json!({ "name": name, "expiry": expiry })),
+ |token| {
+ assert!(!token.token.is_empty());
+ },
+ )
+ .await;
+}
+
+#[tokio::test]
+async fn mcp_server_should_delete_personal_access_token() {
+ assert_empty_response(
+ "delete_personal_access_token",
+ Some(json!({ "name": PERSONAL_ACCESS_TOKEN_NAME})),
+ )
+ .await;
+}
+
+#[tokio::test]
+async fn mcp_server_should_return_users() {
+ assert_response::<Vec<UserInfo>>("get_users", None, |users| {
+ assert_eq!(users.len(), 2);
+ })
+ .await;
+}
+
+#[tokio::test]
+async fn mcp_server_should_return_user_details() {
+ assert_response::<UserInfoDetails>("get_user", Some(json!({ "user_id": USER_NAME})), |user| {
+ assert_eq!(user.username, USER_NAME);
+ })
+ .await;
+}
+
+#[tokio::test]
+async fn mcp_server_should_create_user() {
+ let username = "test-mcp-user";
+ assert_response::<UserInfoDetails>(
+ "create_user",
+ Some(json!({ "username": username, "password": "secret"})),
+ |user| {
+ assert_eq!(user.username, username);
+ },
+ )
+ .await;
+}
+
+#[tokio::test]
+async fn mcp_server_should_update_user() {
+ assert_empty_response(
+ "update_user",
+ Some(json!({ "user_id": USER_NAME, "username": "test-mcp-user", "active": false})),
+ )
+ .await;
+}
+
+#[tokio::test]
+async fn mcp_server_should_delete_user() {
+ assert_empty_response("delete_user", Some(json!({ "user_id": USER_NAME}))).await;
+}
+
+#[tokio::test]
+async fn mcp_server_should_update_permissions() {
+ let permissions = json!({
+ "global": {
+ "manage_servers": true,
+ "read_users": true,
+ },
+ "streams": {
+ "1": {
+ "manage_stream": true,
+ "manage_topics": true,
+ "topics": {
+ "1": {
+ "manage_topic": true,
+ "read_topic": true,
+ "poll_messages": true,
+ "send_messages": true,
+ }
+ }
+ }
+ }
+ });
+
+ assert_empty_response(
+ "update_permissions",
+ Some(json!({ "user_id": USER_NAME, "permissions": permissions })),
+ )
+ .await;
+}
+
+#[tokio::test]
+async fn mcp_server_should_change_password() {
+ assert_empty_response(
+ "change_password",
+ Some(json!({ "user_id": USER_NAME, "current_password": USER_PASSWORD, "new_password": "secret2"})),
+ )
+ .await;
+}
+
async fn assert_empty_response(method: &str, data: Option<serde_json::Value>) {
assert_response::<()>(method, data, |()| {}).await
}
@@ -490,6 +610,19 @@ async fn seed_data(iggy_server_address: &str) {
.create_consumer_group(&STREAM_ID, &TOPIC_ID, CONSUMER_GROUP_NAME, None)
.await
.expect("Failed to create consumer group");
+
+ iggy_client
+ .create_user(USER_NAME, USER_PASSWORD, UserStatus::Active, None)
+ .await
+ .expect("Failed to create user");
+
+ iggy_client
+ .create_personal_access_token(
+ PERSONAL_ACCESS_TOKEN_NAME,
+ PersonalAccessTokenExpiry::NeverExpire,
+ )
+ .await
+ .expect("Failed to create personal access token");
}
#[derive(Debug)]