A semantic layer is an intermediary between raw data sources
(data warehouses, lakes, etc.) and business users/tools. It translates technical
schemas into business-friendly terms, defines shared vocabulary and rules, and
provides a consistent, governed view of data for analytics.
Why Organizations Need It
Eliminates silos and inconsistency:
Unifies data from many systems under one business vocabulary so
“sales,” “revenue,” etc., mean the same thing across teams.
Improves accessibility:
Lets non-technical users explore data via self-service without deep
SQL or schema knowledge.
Speeds insights:
Predefined metrics and relationships let analysts build reports faster
and make decisions more quickly.
Types of Semantic Layers
Universal:
Standalone, enterprise-wide layer acting as a single source of truth;
great for governance and flexibility but costlier.
Data warehouse semantic layer:
Lives inside the warehouse; focuses on naming, data model organization,
and lineage.
Data lake semantic layer:
Organizes schemas and meanings for unstructured/semi-structured data
in lakes.
BI semantic layer:
Sits between warehouses/lakes and tools like Power BI/Tableau; defines
business concepts, relationships, and prebuilt metrics.
How It Works (Key Components)
Data sources:
Raw repositories (warehouses, lakes).
Data integration:
Extracts and transforms data into consistent formats.
Metadata repository:
Stores definitions, models, and relationships.
Semantic model:
Encodes business logic, hierarchies, metrics, and calculations.
Query engine:
Translates user queries into source-specific queries.
Identify business requirements with analysts and domain experts.
Assess existing data sources for format and quality.
Design the semantic model using sound modeling techniques.
Implement using BI/data modeling tools (views, calculated fields, hierarchies).
Integrate with sources via connectors/APIs and ETL/ELT processes.
Test, validate (including UAT), then deploy and maintain with ongoing monitoring.
Challenges to Watch
Complex initial setup and integration.
Scalability as data volume/variety grows.
Maintaining consistency across sources.
Ongoing cost, resources, and change management/user adoption.
Common Implementation Architectures
Architecture
Description
Metadata-first
Logical, metadata-driven unification without physical consolidation;
balances standardization and agility.
Ontology modeling language (OML)
Uses a shared ontology (e.g., UFO) to build a knowledge graph for
federated data.
Built-for-purpose
Decentralized, leveraging semantics inside individual tools
(CRM, BI) per business unit.
Centralized
Consolidates definitions/logic in an EDW/DL; strong governance
but heavy upfront investment.
Tools with Sematic-Layer Capabilities
Cube.js, MetricFlow, dbt, Tableau, and Power BI,
highlighting features like data modeling, metrics layers, caching, APIs,
and visualization/integration strengths.
While the Model Context Protocol (MCP) 2026-07-28
specification removed protocol-level sessions
(Mcp-Session-Id
and the
initialize
handshake) to make the protocol stateless, the
Context object in FastMCP remains a core feature,
though its underlying scope and behavior have changed.
How the Context Object Has Changed
From Session-Scoped to Request-Scoped
Previously, the Context
object was tied directly to a persistent, long-lived client session.
In the new stateless era,
each individual MCP request receives a brand new, isolated
Context
object.
State Isolation
Any state you set dynamically inside a tool via
ctx.set_state()
is strictly scoped to that single, specific request execution.
It does not leak or persist into subsequent tool calls or requests.
Protocol Era Coexistence
The Context
object is backward-compatible. Inside your handlers, you can check
ctx.request_context.protocol_version
to determine if a call arrived via the legacy handshake era
(session-backed) or the modern stateless era.
Ambient Cleanup
The ambient
server.request_context
global
ContextVar
has been entirely removed in favor of strict, clean parameter injection
(ctx: Context)
passed directly into your functions.
Why the Context Object Is Still Needed
The Context
object does not exist just to manage sessions; it acts as your tool's
gateway to operational sub-systems. It is still heavily used for:
Logging & Progress:
Dispatching real-time
ctx.info(),
ctx.error(),
and
ctx.report_progress()
updates back to the client UI.
Client Sampling:
Allowing the server to request completions from the client LLM dynamically
using
ctx.sample().
Lifespan Management:
Providing access to persistent backend resources initialized at startup
(like database drivers or external APIs) via
ctx.request_context.lifespan_context.
Note
As part of the same v2 stateless transition, the high-level framework class
FastMCP
has been renamed to
MCPServer
in the official Python SDK.
Migration Details
Old Import (v1):from mcp.server.fastmcp import FastMCP
New Import (v2):from mcp.server.mcpserver import MCPServer
Context Property:ctx.fastmcp changed to ctx.mcp_server
Using older version of langchain-mcp-adapters produces the following error:
ImportError: cannot import name 'streamablehttp_client' from 'mcp.client.streamable_http' (/usr/local/lib/python3.12/dist-packages/mcp/client/streamable_http.py). Did you mean: 'streamable_http_client'?
This is the error of version mismatch of langchain-mcp-adapters package, not an error of importing wrong package.
You can just updgrade langchain-mcp-adapters and check back:
!pip install --upgrade mcp langchain-mcp-adapters
This error was caused at the statement:
from langchain_mcp_adapters.client import MultiServerMCPClient
A revolutionary change was announced on 28/July/2026 in the MCP specifications. It announced specifications for stateless MCP, making it fit to the era of distributed computing.This redesign addresses one of the biggest barriers to deploying AI agents at production scale—scalability. By making MCP stateless, developers can now deploy AI agents using the same cloud-native infrastructure and scaling techniques that power modern web applications.
Background: Why MCP Matters
The Model Context Protocol (MCP) has emerged as the standard interface that allows AI models and agents to communicate with external tools, APIs, databases, and services.
Instead of building custom integrations between every model and every tool, MCP provides a common protocol that standardizes discovery and invocation.
However, the original MCP protocol maintained server-side session state. Once a client initialized a session with an MCP server, subsequent requests had to reach the same server instance because that instance stored the conversation and capability state.
While this worked well for local development and small deployments, it introduced serious challenges in production environments.
Problems with Stateful MCP
The article explains several operational limitations caused by maintaining sessions on the server.
1. Sticky Sessions
Because each server instance stored client state, load balancers had to route every request from a client back to the same server.
This prevented true horizontal scaling and made infrastructure more complex.
2. Difficult Autoscaling
Cloud-native platforms such as Kubernetes, Cloud Run, and serverless functions continuously add and remove instances based on demand.
With stateful MCP:
Removing an instance could disconnect active sessions.
Scaling required session replication or external session stores.
Infrastructure became significantly more complicated.
3. Reduced Reliability
If the server maintaining a client's session crashed, the session was lost.
Even rolling deployments could interrupt connected clients because session ownership was tied to a particular server.
These issues made production deployments unnecessarily difficult despite MCP itself being conceptually simple.
The Shift to Stateless MCP
The central idea of the update is simple:
Every request contains all of the information required to process it, in a new field called "_meta". It will include "capabilities" and "clientInfo" fields, which were earlier exchanged only in the beginning, in the "initialize" request. The "intialize" request itself is deprecated now.
Instead of relying on previously established server-side state, each request becomes self-contained.
This aligns MCP with how REST APIs and modern HTTP services already operate.
Now any server instance can process any incoming request.
The server no longer needs to remember earlier interactions.
Infrastructure Benefits
The article highlights several operational improvements.
Horizontal Scaling
Since every request is independent:
requests can go to any replica,
standard load balancers work correctly,
no sticky routing is necessary.
This greatly simplifies Kubernetes and cloud deployments.
Serverless Compatibility
Stateless services are ideal for:
Cloud Run
AWS Lambda
Azure Functions
edge computing platforms
Instances can start, handle a request, and shut down without preserving client state.
Improved Reliability
If one server fails:
another instance immediately handles subsequent requests,
clients experience fewer disruptions,
deployments become safer.
This improves availability while simplifying operations.
Self-Describing Requests
One of the major protocol changes is that requests now include metadata describing:
supported protocol version,
capabilities,
context needed for execution.
Previously, servers had to remember these details from an initialization handshake.
Now they travel with every request.
As a result:
requests become portable,
servers remain stateless,
infrastructure becomes easier to manage.
HTTP-Friendly Design
The new protocol is intentionally designed around standard HTTP infrastructure.
Several protocol elements now map directly to HTTP concepts.
For example:
methods appear in HTTP headers,
tool names can be exposed through headers,
gateways can inspect requests without parsing JSON payloads.
This enables existing API gateways and reverse proxies to perform:
routing,
authentication,
authorization,
logging,
monitoring.
Organizations can therefore reuse their existing networking infrastructure rather than deploying MCP-specific components.
Important Note
Because MCP now aligns closely with standard HTTP semantics, existing cloud infrastructure—including API gateways, reverse proxies, service meshes, and load balancers—can operate without requiring protocol-specific customization.
Caching Improvements
The article also introduces cacheable discovery responses.
Operations like:
listing tools,
discovering capabilities,
retrieving metadata
typically change infrequently.
The updated protocol allows servers to specify cache lifetimes.
Clients can therefore reuse cached information instead of repeatedly requesting identical data.
Benefits include:
reduced latency,
lower bandwidth,
fewer server requests,
improved scalability.
Large deployments especially benefit because discovery operations often represent a significant portion of traffic.
Multi-Round Interactions
A concern with stateless systems is supporting workflows that naturally span multiple interactions.
Rather than relying on persistent bidirectional sessions, MCP introduces mechanisms for Multi Round-Trip Requests (MRTR).
This allows:
clarification requests,
user input,
long-running operations,
asynchronous workflows
without requiring permanently open connections.
The protocol separates application workflow from transport-layer state.
Applications may still maintain business state (such as task IDs or workflow progress), but the transport itself remains stateless.
Security Improvements
The protocol update also strengthens authorization.
The article references improvements that align MCP more closely with OAuth and OpenID Connect best practices.
Security enhancements include:
stronger issuer validation,
improved authorization handling,
enterprise-friendly authentication mechanisms.
These changes make MCP easier to integrate into existing enterprise identity systems while reducing security risks associated with session management.
Important Note
The security model focuses on standards-based authentication and authorization, allowing organizations to integrate MCP with existing enterprise identity providers and security infrastructure.
Developer Impact
For developers building MCP servers, the migration requires some architectural adjustments.
Previously, developers often stored:
session objects,
client capabilities,
negotiated protocol versions,
temporary context
inside server memory.
With stateless MCP:
servers should treat each request independently,
persistent application state should live in databases or external storage when necessary,
infrastructure no longer manages conversational state.
Although this may require code changes, it dramatically simplifies deployment.
Tip
Stateless application servers should only process requests. Long-lived application state should be stored in external databases, distributed caches, or workflow engines rather than server memory.
Cloud-Native Alignment
A recurring message throughout the article is that AI infrastructure should leverage decades of cloud engineering rather than inventing new operational models.
Stateless MCP allows AI agent infrastructure to inherit proven practices such as:
autoscaling,
rolling deployments,
health checks,
CDN caching,
standard load balancing,
serverless execution,
edge deployment.
This makes MCP servers behave like conventional HTTP services rather than specialized stateful applications.
Why This Matters
The article argues that the stateless redesign is less about changing how developers invoke tools and more about changing how AI systems can scale in production.
As organizations deploy thousands or millions of AI-agent requests, infrastructure complexity—not model quality—often becomes the bottleneck.
Removing protocol-level session state enables:
simpler deployments,
better resilience,
lower operational costs,
easier scaling,
improved compatibility with modern cloud platforms.
In essence, MCP evolves from a protocol optimized for developer convenience into one optimized for enterprise-scale AI infrastructure.
Important Note
The primary motivation behind the stateless redesign is not to change the programming model, but to eliminate infrastructure bottlenecks that arise when AI systems are deployed at production scale.
Conclusion
The stateless MCP update represents a foundational architectural shift. Instead of tying clients to individual server instances, every request is now self-contained, allowing AI agent infrastructure to operate like any modern distributed web service. This eliminates sticky sessions, enables seamless autoscaling, improves reliability, and integrates naturally with existing HTTP infrastructure, gateways, caches, and serverless platforms. Combined with enhancements such as cacheable discovery, multi-round request handling, and stronger authorization, these updates position MCP as a protocol capable of supporting large-scale, production-grade AI agent ecosystems rather than just local development or small deployments.
Summary
Area
Stateless MCP Improvement
Architecture
Every request is self-contained.
Scaling
Supports true horizontal scaling without sticky sessions.
Reliability
Server failures no longer terminate protocol sessions.
Cloud Support
Compatible with Kubernetes, serverless platforms, and edge deployments.
Performance
Cacheable discovery reduces latency and server load.
Security
Improved authorization aligned with OAuth and OpenID Connect.
Developer Experience
Application state moves to external storage while infrastructure remains stateless.
The Model Context Protocol (MCP) relies on JSON-RPC 2.0 as its core wire format to enable seamless communication between LLM clients and servers. These methods are separated by direction and functionality, managing everything from lifecycle initialization to specific resource, tool, and prompt capabilities.
Client-to-Server Requests
These methods are invoked by the AI client to query capabilities, manage sessions, or execute actions on the server.
Lifecycle & Session
Method
Purpose
initialize
Establishes the connection and negotiates protocol capabilities.
ping
Performs a standard connectivity and health check.
Tools Feature
Method
Purpose
tools/list
Requests a comprehensive list of all executable tools available on the server.
tools/call
Instructs the server to execute a specific tool with designated parameters.
Resources Feature
Method
Purpose
resources/list
Discovers context data and files exposed by the server.
resources/read
Retrieves the raw content of a specific resource.
resources/templates/list
Lists modular URI templates available to dynamically fetch data.
resources/subscribe
Requests continuous real-time updates for a resource.
resources/unsubscribe
Cancels an active resource data subscription.
Prompts Feature
Method
Purpose
prompts/list
Discovers pre-built prompt templates available on the server.
prompts/get
Retrieves the specific structure and layout of a chosen prompt template.
Configuration & Utilities
Method
Purpose
logging/setLevel
Adjusts the verbosity thresholds for the server's logging outputs.
roots/list
Requests a list of underlying file system roots accessible to the client.
Server-to-Client Requests
These methods allow the server to ask the client for additional user context, file visibility, or model completions.
Method
Purpose
ping
Server-initiated connectivity verification to check client status.
sampling/createMessage
Requests the LLM client to generate a message or text completion.
elicitation/create
Prompts the host client to safely gather explicit human input.
completion/complete
Requests auto-completion string matching from the client.
Notifications (Asynchronous Events)
Notifications do not include an id field and do not expect a returned response object. They primarily track real-time changes.
Notification
Purpose
notifications/initialized
Sent by the client to signal that initialization is finalized.
notifications/cancelled
Signals that a running asynchronous operation has been cancelled.
notifications/progress
Provides step-by-step progress tracking for long-running actions.
notifications/tools/list_changed
Notifies the client that the server's tool availability matrix has updated.
notifications/resources/list_changed
Broadcasts changes regarding underlying data resources.
notifications/prompts/list_changed
Alerts the client that server prompt templates have been modified.
notifications/message
Transmits live logging data records from the server to the client console.
Model Context Protocol (MCP) Primitives
Model Context Protocol (MCP) primitives are the core building blocks defined in the data layer that let AI clients and servers share context, structure interactions, and execute tasks. They split into server-side capabilities (tools, resources, prompts) and client-side control features (sampling, elicitation, roots).
Server-Side Primitives
Primitive
Description
Tools
Model-controlled executable functions that let the LLM perform actions like API calls, file updates, or database queries.
Resources
Application-controlled data sources providing ambient reference data and context like file contents or database records.
Prompts
User-controlled reusable templates and slash commands that standardize workflows and interactions.
Client-Side Primitives
Primitive
Description
Sampling
Server-initiated requests allowing an MCP server to safely query the host's LLM for agentic or recursive behaviors.
Elicitation
Mid-task requests where a server asks the user for missing details or confirmation instead of guessing.
Roots
Security boundaries defining which specific directories or files a server can access.
Elicitation Requests
An elicitation request is a runtime mechanism in the Model Context Protocol that allows a server to dynamically prompt a user for missing details or confirmation during tool execution rather than failing. It supports form collection for structured data and secure URL redirects for sensitive tasks.
Key Modes & Actions
Mode / Action
Description
Form Mode
Collects in-band structured inputs and primitives using optional validation schemas.
URL Mode
Sends users out-of-band to a browser for secure flows like OAuth or payments.
Response Actions
User interactions follow an accept, decline, or cancel framework.
Important Note
Elicitation enables MCP servers to request additional information from users safely and explicitly, avoiding assumptions during task execution while supporting structured forms and secure external workflows.