Table of Contents

  1. What Is MCP?

  2. Overview of the 2025‑06‑18 Revision

  3. Top 9 Core Changes Explained

    1. Dropping JSON‑RPC Batch Requests
    2. Introducing Structured Tool Output
    3. Classifying MCP as an OAuth Resource Server
    4. Mandating Resource Indicators in Clients
    5. Enhanced Security Guidance & Best Practices
    6. Elicitation: Interactive Data Collection
    7. Embedding Resource Links in Tool Responses
    8. Enforcing Protocol Version via HTTP Header
    9. Upgrading Lifecycle Operations from SHOULD to MUST
  4. Other Schema Updates at a Glance

  5. Smooth Migration Path to 2025‑06‑18

  6. Frequently Asked Questions (FAQ)

  7. Conclusion: Embracing a More Secure, Extensible Protocol


What Is MCP?

Model Context Protocol (MCP) is an open‑source specification designed to standardize communications between large language models and backend services. By defining a consistent request/response format, tool‑invocation patterns, and security measures, MCP enables AI integrators to build scalable, maintainable, and secure applications without wrestling with inconsistent API designs.

Before MCP’s arrival, each AI vendor or platform often devised its own JSON schema, auth flows, and error handling. This fragmented landscape raised integration costs, increased maintenance overhead, and made multi‑vendor support a headache. MCP bridges that gap, offering a unified interface so developers can focus on building features instead of reinventing protocol handling.

Who Should Read This

  • Backend developers with basic familiarity in API design and OAuth security
  • Product or architecture engineers planning to integrate large‑model capabilities into existing services

Overview of the 2025‑06‑18 Revision

The June 18, 2025 update enhances three pillars:

  • Security: Strengthened OAuth flows, mandatory resource indicators, and clearer best‑practice guidance.
  • Usability: Elimination of JSON‑RPC batch requests for simpler request lifecycles; formal support for structured tool outputs.
  • Extensibility: New interactive elicitation mechanism, embedded resource links, and schema fields to future‑proof integrations.

Rather than incremental tweaks, this revision centers on developer experience—tightening security where needed, streamlining day‑to‑day interactions, and enabling richer metadata for tooling.


Top 9 Core Changes Explained

Below we unpack each major change, show examples, and offer practical advice on adapting your code and processes.

1. Dropping JSON‑RPC Batch Requests

What Changed

The MCP spec no longer supports JSON‑RPC batch calls. Previously, clients could send an array of JSON‑RPC calls in one HTTP request; now, each call must be sent individually.

Why It Matters

Batching across distinct tools or tasks often caused state inconsistencies when mixing multiple operations. By focusing on single‑task requests:

  • Clarity: Each HTTP call has a single responsibility, making logs and traces easier to interpret.
  • Reliability: Error contexts map directly to one request rather than an element in a batch array.
  • Parallelism: Modern HTTP/2 clients and server implementations already handle multiplexing under the hood—no need for manual batch.

Example Before

[
  {"jsonrpc":"2.0","method":"complete","params":{...},"id":1},
  {"jsonrpc":"2.0","method":"complete","params":{...},"id":2}
]

Example After

POST /v1/complete HTTP/1.1
Content-Type: application/json

{"jsonrpc":"2.0","method":"complete","params":{...},"id":1}

Migration Tips

  1. Refactor code to send individual POST calls for each RPC method.
  2. Use async/await or a task queue (e.g., RabbitMQ, AWS SQS) to parallelize calls if needed.
  3. Wrap retry logic around single calls rather than batches for finer‑grained error handling.

2. Introducing Structured Tool Output

What Changed

MCP now defines a unified JSON Schema for structured tool outputs, allowing consumers to parse and render results without ad hoc HTML extraction.

Why It Matters

  • Front‑end Rendering: Components can bind directly to JSON fields (e.g., tables, charts, cards).
  • Data Validation: Leverage JSON Schema validators to catch mismatches early in CI/CD.
  • Cross‑Platform UI: Mobile, desktop, and web clients can reuse the same schema.

Example

{
  "tool": "weather",
  "output": {
    "type": "forecast",
    "data": [
      {"day":"Monday","high":25,"low":15},
      {"day":"Tuesday","high":28,"low":18}
    ]
  }
}

Migration Tips

  • Update your server’s tool‑invocation code to emit the new schema.
  • Integrate a JSON Schema validator (e.g., Ajv for JavaScript, everit for Java) in your build pipeline.
  • Refactor UI components to consume structured fields instead of raw HTML.

3. Classifying MCP as an OAuth Resource Server

What Changed

MCP endpoints are now formally categorized as OAuth Resource Servers. They must expose metadata at the /.well-known/resource-server URL, advertising authorization and token endpoints.

Why It Matters

  • Auto‑Discovery: Clients can automatically locate the authorization server for token acquisition.
  • Multi‑Tenant Friendliness: A single domain can host multiple resource “namespaces” without manual config.

Example Response

GET /.well-known/resource-server HTTP/1.1
Host: api.example.com

{
  "authorization_endpoint":"https://auth.example.com/oauth2/authorize",
  "token_endpoint":"https://auth.example.com/oauth2/token"
}

Migration Tips

  1. Add a static JSON document at /.well-known/resource-server.
  2. Ensure your API gateway or web server routes that path correctly.
  3. Update client libraries to fetch and cache this metadata before requesting tokens.

4. Mandating Resource Indicators in Clients

What Changed

Per RFC 8707 Resource Indicators, all MCP clients must send a Resource header when requesting access tokens, binding the token to a specific API.

Why It Matters

  • Scope Protection: Prevents clients from using an access token at an unintended resource.
  • Attack Surface Reduction: Tokens become unusable if stolen or replayed against other endpoints.

Example Request

POST /v1/complete HTTP/1.1
Authorization: Bearer abc123
Resource: https://api.example.com/mcp
Content-Type: application/json

{…}

Migration Tips

  • Extend your OAuth library or code to include the Resource header in token requests.
  • Validate on the server side that incoming tokens match the Resource field.
  • Test error cases where resource‑mismatched tokens should be rejected.

5. Enhanced Security Guidance & Best Practices

What Changed

The spec adds a dedicated “Security Best Practices” section clarifying key management, rotation, and auditing recommendations.

Why It Matters

  • API Key Rotation: Encourages short‑lived credentials to limit exposure.
  • Least Privilege: Advise granting only model invocation rights, not broader admin scopes.
  • Audit Logging: Mandates logging critical events—including client IP—for forensic analysis.

Migration Tips

  • Implement automated key rotation (e.g., AWS Secrets Manager, Azure Key Vault).
  • Review IAM policies and scopes to enforce minimal permissions.
  • Ensure centralized logging of requests, including metadata for security auditing.

6. Elicitation: Interactive Data Collection

What Changed

MCP introduces an Elicitation mechanism, enabling the server to prompt clients (and end‑users) for missing parameters or clarifications during a session.

Why It Matters

  • Improved UX: Users receive dynamic prompts instead of confusing error messages.
  • Reduced Failures: Missing required fields can be supplied on the fly rather than returning 4xx errors.

Example Payload

{
  "elicitation": {
    "prompt": "Which city would you like to check weather for?",
    "requiredFields":["city"]
  }
}

Migration Tips

  1. Update your client SDK to recognize and display elicitation prompts.
  2. Provide fallback defaults or “skip” options for non‑interactive environments.
  3. Log elicitation events for analytics on missing‑field patterns.

7. Embedding Resource Links in Tool Responses

What Changed

Tool responses can now include a resourceLinks array, pointing to relevant documentation, example repos, or API references.

Why It Matters

  • Deeper Context: Developers can jump straight to official docs via “View Documentation” buttons.
  • Faster Onboarding: New team members can explore linked resources without leaving the client UI.

Example

{
  "tool":"translate",
  "output":{},
  "resourceLinks":["https://docs.example.com/translate"]
}

Migration Tips

  • Enhance your tool modules to populate helpful links.
  • Update front‑end templates to render link buttons or cards dynamically.
  • Maintain an internal registry of canonical doc URLs for consistency.

8. Enforcing Protocol Version via HTTP Header

What Changed

All MCP requests must include an MCP-Protocol-Version header, indicating the client’s supported spec version.

Why It Matters

  • Backward Compatibility: Servers can branch logic based on version value.
  • Graceful Upgrades: Clients and servers can coexist across multiple MCP revisions.

Example Request

POST /v1/complete HTTP/1.1
MCP-Protocol-Version: 2025-06-18
Content-Type: application/json

{…}

Migration Tips

  • Inject the header automatically in your HTTP client or SDK.
  • Implement server‑side routing or handlers that check version compatibility.
  • Deprecate older versions with advance notifications to clients.

9. Upgrading Lifecycle Operations from SHOULD to MUST

What Changed

Several actions formerly marked as “SHOULD” are now “MUST,” making them mandatory for all MCP implementations. A prime example is the terminate event at session end.

Why It Matters

  • Consistency: All clients send and servers consume lifecycle callbacks uniformly.
  • Resource Cleanup: Ensures sessions, locks, or temp files get released reliably.

Diff Example

- Clients **SHOULD** send a `terminate` event when the session ends.
+ Clients **MUST** send a `terminate` event when the session ends.

Migration Tips

  • Audit your client code to guarantee mandatory events are emitted.
  • Update server test suites to reject clients that omit required lifecycle calls.
  • Log and monitor for missing termination events to prevent resource leaks.

Other Schema Updates at a Glance

Beyond the nine core highlights, MCP 2025‑06‑18 introduces:

  • _meta field on various responses for custom metadata and future extensions.
  • context property in CompletionRequest, enabling pre‑parsed variables for smoother multi‑turn conversations.
  • title attribute alongside name, allowing friendly display names while preserving programmatic identifiers.

These changes aim to make the protocol more adaptable and reduce versioning conflicts when extending models or tools.


Smooth Migration Path to 2025‑06‑18

  1. Version Discovery

    • Fetch /.well-known/resource-server and check the advertised MCP-Protocol-Version.
  2. Security Enhancements

    • Add Resource headers, enable RFC 8707 flows, and rotate keys per best practices.
  3. Batch Removal

    • Refactor batch calls to singular POSTs; leverage async patterns or queuing for parallelism.
  4. Structured Output Adoption

    • Update JSON schemas for your tools, validate with a schema validator, and refactor UIs.
  5. Automated Regression Tests

    • Cover new features like elicitation, resourceLinks, and mandatory lifecycle events in CI pipelines.

Frequently Asked Questions (FAQ)

Q1. Why remove JSON‑RPC batch support?
Batching reduces HTTP requests but introduces state‑management complexity when mixing different tool calls. Single‑request flows clarify ordering and rely on HTTP/2 multiplexing to retain performance.

Q2. When should I use structured tool output?
Anytime you need to render results as UI components—tables, charts, or cards. It eliminates brittle HTML stripping and simplifies data validation.

Q3. Will elicitation disrupt non‑interactive clients?
No. Elicitation is optional. If a client can’t—or chooses not to—respond, servers should gracefully fall back to defaults or error codes without blocking the main workflow.

Q4. How do I maintain compatibility with older MCP versions?
Leverage the MCP-Protocol-Version header to detect client versions. Keep legacy handlers alive, and schedule deprecation notices once the majority of clients have migrated.


Conclusion: Embracing a More Secure, Extensible Protocol

MCP 2025‑06‑18 marks a significant milestone in the evolution of model‑to‑server communication. By tightening security, simplifying request patterns, and embracing richer metadata, this revision empowers developers to build reliable, maintainable AI integrations with confidence.

Whether you’re launching a new AI‑powered feature or upgrading your existing MCP stack, these changes ensure a smoother developer experience and stronger protection for your users. Let’s adopt MCP 2025‑06‑18 together and lay the groundwork for the next generation of AI applications!