Separate incoming updates from agent work
You treat delivery and model execution as separate decisions. A resource subscription receives updates but never grants an agent permission to run.
Unit example (nearest native match)
See the idea in context
let route = AxEventRoute {
id: "resource-wake".into(),
action: "wake".into(),
r#match: json!({"types":["mcp.resource.updated"]}),
target_id: Some("inventory-agent".into()),
require_authenticated: true,
ordering: "strict".into(), debounce_ms: 0, instance_key: None,
};
let mut runtime = AxEventRuntime::new(vec![route], json!({}))?;
runtime.register_target(target);
runtime.start()?;
let runtime = Arc::new(Mutex::new(runtime));
let mut source = AxMCPEventSource::with_policy(
client.clone(), runtime.clone(), "inventory",
"tenant:demo", "authenticated",
AxMCPResourceSubscriptionPolicy::All,
);
source.start()?;
source.poll(); // Drain protocol callbacks on the host thread.- Discover the endpoint
The live catalog identifies concrete resources and supported event capabilities.
- Apply subscription policy
Your application chooses which updates it actually wants.
- Route through the inbox
An explicit event route decides whether the update only records state or wakes work.
Run itIn your own project
cargo add axllm
use axllm::{ai, ax};
use serde_json::json;
let llm = ai("openai", json!({"apiKey": std::env::var("OPENAI_API_KEY")?}))?;
let classify = ax("review:string -> sentiment:class \"positive, negative, neutral\"")?;Set OPENAI_APIKEY in your environment before running provider-backed code.
From a clone of the ax repo:
npm run example -- rust src/examples/rust/mcp/resource_wake_agent.rsActive practice
Answer 2 in a row to learn this · attempt 1