Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
147 commits
Select commit Hold shift + click to select a range
32be343
feat(mcp-server): Initial AD4M MCP server implementation
data-coasys Feb 11, 2026
1e1a62b
feat(mcp): Integrate MCP server into rust-executor
data-coasys Feb 11, 2026
c460519
feat(mcp): add authentication tools (login, set_token, auth_status)
data-coasys Feb 17, 2026
2d34133
Merge branch 'dev' into feature/mcp-server
lucksus Feb 17, 2026
4f30b2e
fix: resolve mutability issues in MCP tools
data-bot-coasys Feb 17, 2026
7f7eabb
fix: address CodeRabbit security and compatibility issues
data-bot-coasys Feb 17, 2026
768867d
refactor: remove standalone mcp-server crate
data-bot-coasys Feb 17, 2026
853db0a
docs: add TODO for MCP HTTP transport, simplify server.rs
data-bot-coasys Feb 17, 2026
f791643
revert: remove patch file and rust-client changes
data-bot-coasys Feb 17, 2026
c76625f
feat(mcp): add authentication tools for login flow
data-bot-coasys Feb 17, 2026
216ca73
fix(mcp): address CodeRabbit security findings
data-bot-coasys Feb 18, 2026
a96d289
feat(mcp): add enable_mcp config option to run MCP server on stdio
data-bot-coasys Feb 18, 2026
fdefbfe
test(mcp): add comprehensive Flux workflow integration tests
data-bot-coasys Feb 18, 2026
c0f5a26
feat(mcp): Switch to HTTP transport (no stdio)
data-bot-coasys Feb 19, 2026
e7996f9
style: cargo fmt
data-bot-coasys Feb 19, 2026
fbe6798
Merge remote-tracking branch 'origin/dev' into feature/mcp-server
data-bot-coasys Feb 24, 2026
ded5e47
feat(mcp): add Flux chat flow tools and integration test
data-bot-coasys Feb 24, 2026
1148c12
fix(cli): add --enable-mcp and --mcp-port flags to ad4m-executor binary
data-bot-coasys Feb 24, 2026
ef8d3b6
feat(mcp): add Ad4mModel parity tools - set_subject_property, get_sub…
data-bot-coasys Feb 24, 2026
e35bc69
fix(mcp): SHACL datatype URI, property resolution, CI workflow
data-bot-coasys Feb 24, 2026
e12453d
feat(mcp): add capability checking (reuses GraphQL's capabilities_fro…
data-bot-coasys Feb 24, 2026
7805053
feat(mcp): replace Prolog with SHACL for list_subject_classes, query_…
data-bot-coasys Feb 24, 2026
ffca064
fix(mcp): resolve signed expression values in get_subject_data
data-bot-coasys Feb 24, 2026
ae1f3ff
feat(mcp): convert auth tests to HTTP-only, add capability checks to …
data-bot-coasys Feb 24, 2026
150c77c
Add AD4M Waker Bridge - watches perspectives via GraphQL WS, wakes Op…
data-bot-coasys Feb 24, 2026
51b53f5
feat(mcp): add get_subject_children and delete_subject tools
data-bot-coasys Feb 25, 2026
3d3e677
feat(mcp): dynamic SHACL→MCP tool generation with list_changed notifi…
data-bot-coasys Feb 25, 2026
2120bd6
style: rustfmt fixes for mcp/tools.rs
data-bot-coasys Feb 25, 2026
d83bccc
feat(mcp): class-first tool naming + per-property set + collection tools
data-bot-coasys Feb 25, 2026
217b149
feat(mcp): add flow tools + add_flow, get_flows, flow_state, flow_act…
data-bot-coasys Feb 25, 2026
4b0a35e
refactor(mcp): rename list_subject_classes → get_models for consisten…
data-bot-coasys Feb 25, 2026
95283d9
chore: remove task planning files
data-bot-coasys Feb 25, 2026
fa6de7a
refactor(mcp): extract SHACL parsing into dedicated shacl.rs module
data-bot-coasys Feb 25, 2026
05a6ce4
fix(mcp): fix flow_start compilation error - placeholder until SHACLF…
data-bot-coasys Feb 25, 2026
42cf215
fix(mcp): fix temporary value lifetime in make_set_property_tool
data-bot-coasys Feb 25, 2026
5d705d3
fix(mcp): replace non-existent PerspectiveInstance methods with inlin…
data-bot-coasys Feb 25, 2026
7bb7d60
fix: remove unused ShaclClass import
data-bot-coasys Feb 25, 2026
a0ff122
fix(mcp): fix DecoratedLinkExpression field access and Option<String>…
data-bot-coasys Feb 25, 2026
e819c89
test(mcp): add dynamic collection, per-property, and children tool tests
data-bot-coasys Feb 25, 2026
e995442
fix(test): remove _update tool expectations, replaced by per-property…
data-bot-coasys Feb 25, 2026
12a8a06
fix(mcp): make class_name optional in get_subject_children params
data-bot-coasys Feb 25, 2026
7e1861f
feat(mcp): replace set_token with proper auth flows
data-bot-coasys Feb 25, 2026
edd43bf
fix(mcp): grant ALL_CAPABILITY in request_capability auth flow
data-bot-coasys Feb 25, 2026
c3451ad
fix: consolidate defs import for ALL_CAPABILITY
data-bot-coasys Feb 25, 2026
38f0202
refactor(mcp): extract shared user management functions into user_man…
data-bot-coasys Feb 25, 2026
d39b1a9
refactor: move user_management.rs to crate root for reuse by GraphQL
data-bot-coasys Feb 25, 2026
6681348
refactor(mcp): improve tool descriptions for LLMs + deduplicate auth …
data-bot-coasys Feb 26, 2026
bffd8a4
refactor(mcp): extract common helpers, remove dead code
data-bot-coasys Feb 26, 2026
ca6dd11
refactor(mcp): enrich tool descriptions with AD4M domain context
data-bot-coasys Feb 26, 2026
cd8d078
refactor(mcp): clean up handle_dynamic_create, use helpers consistently
data-bot-coasys Feb 26, 2026
91107cc
feat(mcp): extract Authorization Bearer token from HTTP headers
data-bot-coasys Feb 26, 2026
0476ff0
docs(mcp): improve module-level documentation
data-bot-coasys Feb 26, 2026
1c47bea
fix(mcp): fix require_arg Result type mismatch in add_collection handler
data-bot-coasys Feb 26, 2026
6af52a6
refactor: extract shared auth flows into user_management.rs
data-bot-coasys Feb 26, 2026
79d183f
chore: remove unused imports from tools.rs (AgentService, Ad4mDb)
data-bot-coasys Feb 26, 2026
ce71ce9
style: cargo fmt
data-bot-coasys Feb 26, 2026
08ae665
chore: remove accidentally committed CUSTOM_DENO_SNAPSHOT.bin symlink
data-bot-coasys Feb 26, 2026
7e04749
feat: add AD4M OpenClaw skill for AI agent onboarding
data-bot-coasys Feb 26, 2026
687316a
feat(mcp): add agent profile tools (get/set profile, set picture)
data-bot-coasys Feb 26, 2026
ee9158a
feat(mcp): add subscribe_to_model and unsubscribe_model tools
data-bot-coasys Feb 26, 2026
54fc909
feat: add AD4M waker - Node.js SurrealDB subscription watcher for Ope…
data-bot-coasys Feb 26, 2026
b6e1ff9
fix(waker): use text/mode format for OpenClaw hooks/wake endpoint
data-bot-coasys Feb 26, 2026
7fed3d7
refactor(mcp+waker): subscription ID architecture
data-bot-coasys Feb 26, 2026
7ccb174
refactor(waker): consolidate to Node.js, use perspectiveLinkAdded
data-bot-coasys Feb 26, 2026
2eb7889
refactor(waker): use SurrealDB query subscriptions (same as Flux UI)
data-bot-coasys Feb 26, 2026
b34030e
refactor(mcp): subscribe_to_model returns SurrealQL query for waker
data-bot-coasys Feb 26, 2026
e7d1807
refactor(waker): use @coasys/ad4m client + PerspectiveProxy.subscribe…
data-bot-coasys Feb 26, 2026
d193255
style: cargo fmt
data-bot-coasys Feb 26, 2026
39bd77b
docs(skill): add waker section to AD4M skill
data-bot-coasys Feb 26, 2026
fbb33c4
Enforce MCP auth: require token for non-auth tools
data-bot-coasys Feb 26, 2026
86f7d80
Merge branch 'dev' into feature/mcp-server
lucksus Feb 26, 2026
8cb964e
Refactor: split tools.rs into modules, remove Flux-specific types
data-bot-coasys Feb 26, 2026
1767cbe
DRY: add get_perspective_with_auth helper, remove schema.gql
data-bot-coasys Feb 26, 2026
5fdc3d3
Add examples to tool descriptions, CLI verification note
data-bot-coasys Feb 26, 2026
6491f99
Add flow_run_action tool stub, uses DRY helper
data-bot-coasys Feb 26, 2026
bdd478a
Add generic agent public perspective tools + flow_run_action
data-bot-coasys Feb 26, 2026
94d7475
DRY: replace 10 boilerplate blocks with get_writable_perspective
data-bot-coasys Feb 26, 2026
baf3aff
Extract shared Literal URL codec, reuse in MCP tools
data-bot-coasys Feb 26, 2026
3fbc1b7
Enrich SHACL module: add predicate URIs and resolve helper
data-bot-coasys Feb 26, 2026
fccebe8
Replace 70-line resolve_property_predicate with shacl module delegation
data-bot-coasys Feb 26, 2026
d946488
Merge branch 'dev' into feature/mcp-server
lucksus Feb 27, 2026
743ec53
fix: address Marvin's review — per-session auth, literal encoding, er…
data-bot-coasys Feb 27, 2026
3aa068c
refactor: split tools into domain files with co-located params
data-bot-coasys Feb 27, 2026
634d849
chore: gitignore waker-bridge/package-lock.json
data-bot-coasys Feb 27, 2026
c464070
fix: remove broken Bearer middleware, auth via MCP tools only
data-bot-coasys Feb 27, 2026
d1da84e
docs: add MCP server documentation page
data-bot-coasys Feb 27, 2026
f434c8d
feat(launcher): add MCP Server toggle to settings UI
data-bot-coasys Feb 27, 2026
07746f8
style: cargo fmt
data-bot-coasys Feb 27, 2026
bc25ca7
style: cargo fmt (all packages)
data-bot-coasys Feb 27, 2026
a5366ef
fix: add MCP port 3001 to cleanup script
marvin-bot-coasys Feb 27, 2026
40de077
fix: resolve rust-client compilation errors (function-shadows-module)
marvin-bot-coasys Feb 27, 2026
6cddeee
feat: add multi-user perspective isolation to MCP tools
data-bot-coasys Feb 27, 2026
ff1caf8
style: cargo fmt --all
data-bot-coasys Feb 27, 2026
1a82579
fix: restore rust-client/schema.gql symlink to core
data-bot-coasys Feb 27, 2026
2f3ceb0
docs(skill): add executor download + waker deployment docs
data-bot-coasys Feb 27, 2026
c6c0ffe
refactor: use rust-client Literal for URL encoding, enrich SHACL meta…
data-bot-coasys Feb 27, 2026
40d28b9
style: cargo fmt --all
data-bot-coasys Feb 27, 2026
2a6cf3f
fix: remove dead literal.rs, clean flux:// ref from docs, use latest …
data-bot-coasys Feb 27, 2026
93cd57d
refactor: reuse PerspectiveInstance SHACL methods in MCP
data-bot-coasys Feb 27, 2026
a90cb03
fix: set owner on perspectives created via MCP in multi-user mode
data-bot-coasys Feb 27, 2026
0534fdc
fix: dynamic query uses SHACL constructor to discover instances
data-bot-coasys Feb 27, 2026
61f0092
style: cargo fmt
data-bot-coasys Feb 27, 2026
4883841
fix: handle Literal encoding mismatch between Flux TS and Rust
data-bot-coasys Feb 27, 2026
54b8990
style: cargo fmt
data-bot-coasys Feb 27, 2026
0143078
fix: apply constructor-based instance discovery to query_subjects
data-bot-coasys Feb 27, 2026
3581cec
style: cargo fmt
data-bot-coasys Feb 27, 2026
d320036
fix(tests): use spawn() instead of exec() in startExecutor, fix MCP p…
marvin-bot-coasys Feb 28, 2026
5b156a3
fix(ci): eliminate CircleCI network/storage charges — local stash ins…
marvin-bot-coasys Feb 28, 2026
c39e1f2
fix(tests): add bob ports to cleanup.js, fix integration.test.ts tear…
marvin-bot-coasys Feb 28, 2026
92dfefa
fix: derive subscription queries from SHACL definitions instead of ha…
data-bot-coasys Mar 1, 2026
928d1fc
feat(mcp): add neighbourhood_publish_from_perspective and neighbourho…
data-bot-coasys Mar 3, 2026
2f9422d
Merge branch 'dev' into feature/mcp-server
lucksus Mar 3, 2026
ee44edb
test(mcp): add two-agent neighbourhood publish/join integration tests
data-bot-coasys Mar 3, 2026
837c191
Reimplement some mcp functions without JS -> direct language calls
lucksus Mar 3, 2026
3ccb70b
Activate neighbourhood mcp tests
lucksus Mar 3, 2026
ec84632
test(mcp): fix neighbourhood tests — use correct auth flow, remove ti…
data-bot-coasys Mar 4, 2026
2fbf9eb
ci: force rebuild to fix stale ad4m-executor binary on Marvin
data-bot-coasys Mar 4, 2026
e814532
ci: clean ad4m-cli before build to fix stale binary on self-hosted ru…
data-bot-coasys Mar 4, 2026
bc61f56
fix(ci): disable turbo cache for ad4m-cli#build — root cause of stale…
Mar 4, 2026
bad429d
ci: delete stale binaries instead of cargo clean
data-bot-coasys Mar 4, 2026
caf149d
docs(skill): add deployment scenarios with TLS guide for multi-user s…
data-bot-coasys Mar 4, 2026
1de832c
docs(mcp): comprehensive MCP and spanning layer documentation
data-bot-coasys Mar 4, 2026
f73a7ce
docs(mcp): restructure per review feedback
data-bot-coasys Mar 4, 2026
e300b6c
docs(mcp): add TLS certificate options and SMTP setup details
data-bot-coasys Mar 4, 2026
fe29ae5
docs(skill): add Holochain reference to description line
data-bot-coasys Mar 4, 2026
af7a8e7
Restructure skill: bot-first, waker prominent, concepts to appendix
data-bot-coasys Mar 5, 2026
f38d723
Add add_child and get_children MCP tools
data-bot-coasys Mar 5, 2026
1255dd7
Add tests for add_child / get_children MCP tools
data-bot-coasys Mar 5, 2026
baa58a6
Merge remote-tracking branch 'origin/dev' into feature/mcp-server
lucksus Mar 5, 2026
dfee309
fix-up MCP agent profile code after merging dev
lucksus Mar 5, 2026
9b7fd29
Add agent profile MCP tests
lucksus Mar 5, 2026
dbbde04
warnings--
lucksus Mar 5, 2026
f3534c4
fix children literal handling
lucksus Mar 5, 2026
43fa9e2
fix children test date handling
lucksus Mar 5, 2026
f0db1f6
fmt
lucksus Mar 5, 2026
d47be0d
add back function needed only in tests
lucksus Mar 5, 2026
f737e92
fix(mcp): close auth bypass — unauthenticated requests must not act a…
marvin-bot-coasys Mar 5, 2026
814ef1c
fix: use create_signed_expression for profile links instead of empty …
data-bot-coasys Mar 5, 2026
c36a78f
refactor: extract MCP test utilities to shared mcp-utils.ts
data-bot-coasys Mar 5, 2026
f7602e5
test: add email signup/login flow test and use shared MCP utils
data-bot-coasys Mar 5, 2026
f0452d0
docs: address review - fix SHACL example to JSON, add Holochain conte…
data-bot-coasys Mar 5, 2026
1aa807a
fmt
data-bot-coasys Mar 5, 2026
c65ceb7
test(mcp): add auth bypass regression tests for empty-token read access
marvin-bot-coasys Mar 5, 2026
e19fcf5
fix: handle thrown errors in auth rejection tests
data-bot-coasys Mar 5, 2026
4413b35
Merge branch 'dev' into feature/mcp-server
lucksus Mar 5, 2026
5ab1d64
Delete plan file
lucksus Mar 5, 2026
efb1209
Merge remote-tracking branch 'origin/feature/mcp-server' into feature…
lucksus Mar 5, 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
24 changes: 24 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ jobs:
name: Build deno snapshot
command: pnpm run build-deno-snapshot
no_output_timeout: 30m
- run:
name: Remove stale binaries (self-hosted runner incremental cache)
command: rm -f target/release/ad4m target/release/ad4m-executor
- run:
name: Build ADAM (without bootstrap languages)
command: pnpm run build-libs
Expand Down Expand Up @@ -138,6 +141,24 @@ jobs:
command: cd ./tests/js && ./email-verification-test-with-setup.sh
no_output_timeout: 30m

integration-tests-mcp:
machine: true
resource_class: coasys/marvin
steps:
- setup_integration_test_environment
- run:
name: Kill any orphaned executors from previous runs
command: |
# MCP tests use ports 16000-16002 (mcp-http) and 16010-16012 (mcp-auth)
# plus port 3001 (MCP HTTP server). Clear all before starting.
for port in 16000 16001 16002 16010 16011 16012 3001; do
lsof -ti:$port | xargs -r kill -9 2>/dev/null || true
done
- run:
name: Run MCP integration tests
command: cd ./tests/js && pnpm run test-mcp
no_output_timeout: 30m

integration-tests-cli:
machine: true
resource_class: coasys/marvin
Expand Down Expand Up @@ -174,3 +195,6 @@ workflows:
- integration-tests-email-verification:
requires:
- build-and-test
- integration-tests-mcp:
requires:
- build-and-test
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,5 @@ rust-executor/test_data
.npmrc
docs-src/
.worktrees/
CUSTOM_DENO_SNAPSHOT.bin
waker-bridge/package-lock.json
87 changes: 84 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions cli/src/ad4m_executor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,10 @@ enum Domain {
log_holochain_metrics: Option<bool>,
#[arg(long, action)]
enable_multi_user: Option<bool>,
#[arg(long, action)]
enable_mcp: Option<bool>,
#[arg(long, action)]
mcp_port: Option<u16>,
},
RunLocalHcServices {},
}
Expand Down Expand Up @@ -183,6 +187,8 @@ async fn main() -> Result<()> {
tls_port,
log_holochain_metrics,
enable_multi_user,
enable_mcp,
mcp_port,
} = args.domain
{
let tls = if tls_cert_file.is_some() && tls_key_file.is_some() {
Expand Down Expand Up @@ -221,6 +227,8 @@ async fn main() -> Result<()> {
log_holochain_metrics,
enable_multi_user,
smtp_config: None,
enable_mcp,
mcp_port,
})
.await;
})
Expand Down
4 changes: 4 additions & 0 deletions cli/src/dev.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ pub async fn run(command: DevFunctions) -> Result<()> {
tls: None,
log_holochain_metrics: None,
enable_multi_user: None,
enable_mcp: None,
mcp_port: None,
smtp_config: None,
})
.await
Expand Down Expand Up @@ -211,6 +213,8 @@ pub async fn run(command: DevFunctions) -> Result<()> {
tls: None,
log_holochain_metrics: None,
enable_multi_user: None,
enable_mcp: None,
mcp_port: None,
smtp_config: None,
})
.await
Expand Down
12 changes: 10 additions & 2 deletions cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,11 @@ enum Domain {
#[arg(long, action)]
admin_credential: Option<String>,
#[arg(long, action)]
enable_multi_user: bool
enable_multi_user: bool,
#[arg(long, action)]
enable_mcp: Option<bool>,
#[arg(long, action)]
mcp_port: Option<u16>,
},
RunLocalHcServices {},
Eve {
Expand Down Expand Up @@ -236,7 +240,9 @@ async fn main() -> Result<()> {
hc_bootstrap_url,
connect_holochain,
admin_credential,
enable_multi_user
enable_multi_user,
enable_mcp,
mcp_port,
} = args.domain
{
let _ = tokio::spawn(async move {
Expand All @@ -257,6 +263,8 @@ async fn main() -> Result<()> {
connect_holochain,
admin_credential,
enable_multi_user,
enable_mcp,
mcp_port,
localhost: None,
auto_permit_cap_requests: None,
tls: None,
Expand Down
1 change: 1 addition & 0 deletions docs-src/pages/_meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"type": "separator",
"title": "Core Concepts"
},
"spanning-layer": "The Spanning Layer",
"auth": "Authentication",
"agents": "Agents",
"languages": "Languages",
Expand Down
1 change: 1 addition & 0 deletions docs-src/pages/developer-guides/_meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
"hooks": "Hooking up models to the UI",
"batch-operations": "Using Batch Operations",
"ai": "Local AI inference with AD4M",
"mcp": "MCP Server (AI Agent Integration)",
"cli": "Using the AD4M CLI"
}
6 changes: 6 additions & 0 deletions docs-src/pages/developer-guides/ai.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import { Callout } from "nextra-theme-docs";

# AI in AD4M

<Callout type="info">
**Looking for AI agent integration?** This page covers running AI models *inside* AD4M. If you want AI agents to *use* AD4M — creating perspectives, managing data, joining neighbourhoods — see the [MCP Server guide](/developer-guides/mcp).
</Callout>

AD4M provides powerful AI capabilities through both local and remote model inference. This allows you to integrate various AI models into your applications, from language models to embedding models and speech recognition.

## Overview
Expand Down
Loading