Classify stateful and stateless MCP Automatic era classification keeps one client compatible with stateful 2025-11-25 and stateless 2026-07-28 servers. Modern discovery returns supported versions, capabilities, instructions, cache policy, and server identity. rust academy academy/topics/mcp-dual-era-discovery website/content-src/academy/course.mjs academy Classify stateful and stateless MCP
Unit 9 · Connect to external tools and data

Classify stateful and stateless MCP

Automatic era classification keeps one client compatible with stateful 2025-11-25 and stateless 2026-07-28 servers. Modern discovery returns supported versions, capabilities, instructions, cache policy, and server identity.

discover()9 focused minutesNot started
Unit example (nearest native match)

See the idea in context

let transport = AxMCPStreamableHTTPTransport::new(endpoint, json!({}))?;
let mcp = Arc::new(Mutex::new(AxMCPClient::new(
    Box::new(transport),
    json!({"namespace":"inventory"}),
)));
let context = AxExecutionContext::new(vec![mcp.clone()], vec![])?;
let catalog = mcp.lock().unwrap().inspect_catalog(false)?;
println!("MCP catalog: {} tools, {} resources, {} templates",
    catalog.tools.len(), catalog.resources.len(),
    catalog.resource_templates.len());
let mut program = ax("request:string -> answer:string")?.with_execution_context(context)?;
let mut llm = OpenAICompatibleClient::new(key, "gpt-5.4-mini");
println!("{}", program.forward(
    &mut llm, json!({"request":"Reindex inventory."}),
)?);
mcp.lock().unwrap().close()?;
  1. Keep automatic classification

    Pin an era only when deployment policy already knows the endpoint contract.

  2. Read modern discovery

    server/discover is stateless and is available only after the endpoint classifies as modern.

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.

In the ax repo

From a clone of the ax repo:

npm run example -- rust src/examples/rust/mcp/native_mcp_tools.rs
Active practice

Show that you can use it

Answer 2 in a row to learn this · attempt 1
Keep exploring

Source-backed follow-up