Contents
  1. Purpose and architecture
    1. Reusable access to external capabilities
    2. Hosts, clients, servers, and models
    3. Turning points in capability exchange
  2. Exposed interfaces
    1. Tools describe callable operations
    2. Resources name information
    3. Prompts return reusable messages
  3. Protocol exchange and discovery
    1. Read a versioned exchange
    2. Build and refresh the catalog
    3. Local processes and remote transports
    4. Continue when input is required
  4. Authority and application control
    1. Acquire access to a protected server
    2. Enforce authority at each boundary
  5. Execution and failure
    1. Trace one issue creation
    2. Interpret errors and interrupted requests
    3. Separate durable tasks from live requests
  6. Verification and choice
    1. Verify the integration and choose its boundary
  7. Check understanding
  8. Open questions
  9. Selected talks
  10. References
  11. Talk library
← All topics

Model Context Protocol: A Shared Interface Between AI Applications and Their Tools

MCP gives AI applications a common interface for discovering and using external capabilities. Servers expose tools, resources and reusable prompts; hosts decide how those capabilities enter the application’s model and user experience. This reduces the need for a different connector for every application-service pair while leaving permission and execution decisions with the responsible systems. This chapter uses core revision 2026-07-28 to explain that exchange and how to implement it.

Purpose and architecture

Reusable access to external capabilities

Model Context Protocol (MCP) is a shared interface between applications and providers of external capabilities. Instead of every application inventing a different way to describe and discover an integration, a provider exposes tools, information, and reusable messages through a common contract. Interoperability means independently implemented components can exchange those capabilities using agreed rules.

The service-specific integration still exists. Someone must translate requests into the backend's operations and interpret its responses. Linear's hosted MCP service, for example, supplies centrally maintained access to issue-management operations. Applications can reuse that interface, but still need compatible clients, suitable permissions, and a workflow that uses the returned information correctly.

A direct function or SDK call is often simpler when one application controls both sides. MCP becomes attractive when several applications should reuse a capability provider without duplicating its integration. That benefit comes with a server to operate or trust and a compatibility boundary to test. The useful decision is where reuse earns those obligations—not whether every operation should become MCP.

Hosts, clients, servers, and models

The host is the application coordinating the experience, model access, context, permissions, and consent. An MCP client is its protocol-facing component for communication with one server; a host can contain several clients. An MCP server exposes capabilities through handlers, which may call a separate backend, such as an issue tracker. These are logical roles, not a requirement for separate machines. A server can be a local subprocess or a remote service.

Tool calling is a different interface: a model proposes an operation and arguments; executable application code performs the accepted call and returns its result. The host can adapt MCP tool definitions into the model's tool format. The published LangChain MCP adapter makes that separation visible by loading MCP tools and then passing them to an agent with a separately selected model. Its example illustrates adaptation, not conformance to this chapter's protocol revision.

No model is required to invoke MCP. Application code can deterministically list capabilities, read resources, or call a known tool. Cross-server coordination can also remain in the host without putting every intermediate payload into model context. The model-facing interface is developed in Where MCP meets the local action boundary; acceptance and execution checks belong in a controlled dispatcher.

The enclosure denotes logical ownership, not isolation. The host adapts model proposals and accepts actions before dispatch; deterministic code can invoke the same interface without a model. Server-side adaptation connects MCP to the backend API.

Turning points in capability exchange

Reusable providers solve a recurring integration problem: independently developed consumers otherwise need separate adapters for the same capability. MCP applies that separation to AI applications. Its history also explains why older examples can teach sound interface ideas while showing incompatible connection mechanics.

DevelopmentContribution
Language Server Protocol — June 27, 2016Microsoft, Red Hat, and Codenvy's announcement described reusable language services across development tools. MCP explicitly identifies LSP as an inspiration for separating consumers from capability providers.
Model-facing function calling — June 13, 2023OpenAI's announcement introduced model-generated JSON arguments for developer-described functions. This predates MCP but addresses the model–application interface, not reusable server communication.
MCP public introduction — November 25, 2024Anthropic open-sourced MCP to reduce repeated custom integrations with isolated data sources. The launch included SDKs, reference servers, and local-server support in Claude Desktop; remote production tooling was forthcoming.
Streamable HTTP — March 26, 2025This revision replaced the earlier HTTP-plus-SSE transport and introduced an OAuth-based authorization framework. Specification changes did not imply simultaneous client adoption.
Self-describing requests — July 28, 2026Maintainers David Soria Parra and Den Delimarsky explained a shift away from connection-bound protocol state to address reliability and scaling difficulties. Applications could retain state through explicit handles.

These developments coexist. A model can propose an ordinary local function call, an MCP server can wrap an established API, and a host can choose either path. The later protocol changes matter because they alter how an exchange carries its assumptions—not because they eliminate service-specific behavior or distributed failures.

Exposed interfaces

Tools describe callable operations

A tool definition advertises an executable operation through a name, description, input JSON Schema, and optional output schema. A schema describes permitted data structure; it does not implement the operation. tools/list discovers definitions, while tools/call requests execution using a name and arguments. Names belong to their server. See Tool definitions shape available choices for designing the model-facing description.

For a teaching adapter, a minimal create_issue interface could use these artifacts. These are excerpts, not complete wire messages or Linear's hosted tool schema.
ArtifactExampleMeaning
Definitioncreate_issue; required string fields teamId and titleAdvertises accepted input shape.
Invocation arguments{"teamId":"team-A","title":"Fix login"}Requests an operation; no result exists yet.
Result excerptstructuredContent: {"issueId":"issue-42"}Server-produced data, not model-generated arguments.

Result structure needs careful interpretation. JSON serialized inside a text content block remains text; it is not the structuredContent field. GitHub's inspected issue-comment handler illustrates this distinction: after backend creation, it returns an ID and URL as serialized JSON in a text result. A host must adapt the actual representation it receives rather than infer the representation from how the text looks.

When an output schema is supplied, results must conform and clients should validate them. A JSON-RPC error differs from an execution failure returned with isError. Neither a well-shaped result nor an annotation such as a read-only hint establishes authority or the intended business effect.

Resources name information

A resource exposes information identified by a Uniform Resource Identifier (URI). A URI names something; it need not be an HTTP address. resources/list returns descriptions, resources/read retrieves content, and resources/templates/list exposes parameterized addresses. Expanding a template selects a URI to read rather than invoking a tool. Content entries can contain text or base64-encoded binary data, with a media type identifying the representation.

A constructed issue resource separates its address from its representation:
ObjectExample
Addressissues://team-A/42
Listed metadataName: Issue 42; media type: application/json
Read content{"title":"Fix login","state":"Backlog"}
Model inputThe host's selected representation of that content

The distinction from tools is not simply reading versus writing: tools can retrieve data too. Resources give applications an addressable information interface. Reading one does not automatically include it in model input. That selection is context assembly, covered in From sources to a request.

Resources can also carry procedural information. Backlog.md exposes a workflow overview and guides for task creation, execution, and completion alongside its callable tools. This gives the host material explaining how to use operations, but availability alone does not ensure that the host reads it or the model follows it.

Prompts return reusable messages

An MCP prompt is a discoverable, parameterized template that returns messages. prompts/list describes templates and their arguments; prompts/get supplies a name and argument values. The server resolves the template, and the host decides whether and how to use its messages. For example, a constructed review_issue template could expand an issue identifier into a user message requesting a review. Retrieving that message does not perform the review.

Prompts are conventionally user-selected. A slash command is one presentation, not a required interface: Mahesh Murag's MCP workshop describes a Zed command that accepts a pull-request identifier and prepares a longer summary prompt. User selection does not make server-authored instructions trusted. Instruction design itself belongs in Prompting and In-Context Learning.

The three interfaces can concern the same service while returning different kinds of artifacts.
InterfaceRequest and returnRemaining application decision
ToolOperation and arguments → execution resultWhether to execute and how to interpret the outcome
ResourceURI → informationWhether and how to include it in context
PromptTemplate and arguments → messagesWhether and how to use those messages

Protocol exchange and discovery

Read a versioned exchange

A remote procedure call (RPC) requests an operation across an execution boundary and returns its result. Birrell and Nelson's February 1984 Cedar RPC paper pursued accessible distributed programming while acknowledging timing and independent failures. MCP uses JSON-RPC 2.0, the JSON-RPC Working Group's transport-independent message convention. A convenient call interface never makes a remote operation behave exactly like a local function.

In revision 2026-07-28, every request carries protocolVersion and clientCapabilities in its metadata. A request names a method and has a non-null string or integer ID, unique among the sender's outstanding requests. Its response repeats that ID and contains a result or error. An error includes an integer code and message. A notification has no ID and receives no response.

Illustrative pseudocode

Python-like pseudocode
# Constructed request; no optional client features advertised.
request = {
    "jsonrpc": "2.0",
    "id": "list-1",
    "method": "tools/list",
    "params": {
        "_meta": {
            "protocolVersion": "2026-07-28",
            "clientCapabilities": {}
        }
    }
}

Capability negotiation tells peers which protocol features they implement. The request's client capabilities describe what the client can handle; server/discover lets it learn what the server supports. Servers must implement discovery, but clients need not call it first. An unsupported version produces UnsupportedProtocolVersionError with supported versions; the client can choose a shared version or report incompatibility. An optional extension needs shared support: otherwise use core behavior or reject the request. Feature support grants no permission, and this revision requires no connection-scoped initialization handshake.

Correlation permits independent requests to finish in a different order. In this constructed exchange, response order does not change identity.
Observed orderMessageInterpretation
1Request read-AFirst outstanding exchange
2Request read-BSecond independent exchange
3Response read-BCompletes the second exchange
4Notification, no IDNot either request's final response
5Response read-ACompletes the first exchange

Older revisions used initialize, a response containing supported capabilities, and notifications/initialized before normal operation. Keep that compatibility mode separate. Package version is another independent identifier: the TypeScript migration guide distinguishes modern-capable packages from explicitly selecting modern wire behavior. It also treats HTTP 401/403 as authorization failures, not evidence that an older protocol should be tried.

Build and refresh the catalog

Discovery has several meanings. A registry helps locate server packages or remote endpoints; it does not host their binaries or enumerate their live capabilities. Namespace verification identifies a publisher, not safe code. After selecting a server, server/discover describes support, while tools/list, resources/list, resources/templates/list, and prompts/list enumerate its interfaces.

Lists may be paginated. An opaque cursor is a continuation token the client passes back without interpreting or changing it. Continue while nextCursor is present; an empty string is still a valid cursor. Do not infer completion from page length. Invalid cursors require error handling rather than treating the partial inventory as complete.

Illustrative pseudocode

Python-like pseudocode
# client.request supplies the required version/capability metadata.
params = {}
items = []
while True:
    page = client.request("tools/list", params)
    items.extend(page["tools"])
    if "nextCursor" not in page:
        break
    params = {"cursor": page["nextCursor"]}

Preserve origin when aggregating catalogs: (server-A, search) and (server-B, search) are different tools. The host may expose either, both, or neither to a model. Discovery is not relevance ranking, and a visible definition is not execution permission.

Caching adds a freshness contract. Complete discover/list/read results carry ttlMs, a time-to-live hint, and cacheScope. Keys include result-affecting parameters; private entries cannot cross authorization contexts. TTL neither freezes content nor schedules polling. Relevant notifications invalidate even fresh entries. Pages are cached independently, so enumeration is not a transactional snapshot; an invalid cursor requires discarding pages and restarting. Continuation exchanges are not cacheable.

subscriptions/listen requests categories of changes or particular resource URIs. Its first message acknowledges the subset the server will honor: inspect that subset. Notification metadata identifies the subscription request. Cancellation or transport loss ends the subscription, so a reconnecting stdio client must subscribe again. A change notification still does not rewrite an existing model input. The host must re-fetch and assemble the next request; Refresh, supersede, remove explains that application responsibility.

A notification invalidates the cache, not the request

A notification invalidates the cache, not the requestThree lanes retain the same Server A search identity. A list result fills the earlier cache and is selected into request 1. A delivered change notification invalidates the cache even before TTL expiry. A later fetch and selection supply request 2. Request 1 stays unchanged.Server definitionHost cacheModel requestsServer A: searchEarlier definitionEarlier definitionCached representationRequest 1Already sentList resultSelectRemains unchangedServer A: searchDefinition changesEarlier cache invalidEven before TTL expiryNotification:invalidateRelevant change delivered through an acknowledged subscriptionRe-fetch when neededNew list resultUpdated definitionNewly fetched cacheRequest 2New selected definitionSelectOrder only: no polling schedule or transactional catalog snapshot implied.
A notification changes cache freshness; a fetch and a new host selection change the next model request. The already-sent request keeps its earlier definition.

Local processes and remote transports

A transport carries protocol messages. With stdio, the client launches a subprocess and exchanges newline-delimited messages through standard input and output. Standard output must remain protocol traffic; diagnostics belong on standard error. With Streamable HTTP, clients POST messages to one MCP endpoint. Responses use JSON or a request-scoped Server-Sent Events (SSE) stream—a server-to-client event delivery format, not necessarily a stream of model tokens.

ResponsibilityLocal subprocessRemote service
ExecutionThe client launches configured code.The service operator runs the server.
Trust decisionExecutable provenance and process privilegesEndpoint authenticity and operator access
CredentialsSecrets explicitly supplied to the process are accessible to it.The client grants access through the service's supported mechanism.
IsolationRequires host or OS controls.Authentication does not certify benign server code.

The inspected TypeScript stdio implementation uses an environment allowlist plus explicitly supplied values and launches with shell:false. These choices limit accidental inheritance and shell interpretation, but do not sandbox the executable. Local execution can still read permitted files and communicate over permitted networks.

July-2026 requests carry their own protocol assumptions rather than depending on an initialized protocol session. This permits routing to different instances without session storage, but applications can still require databases and explicit state handles. The redesign addressed operational complexity and introduced migration costs; it is not a measured throughput guarantee.

Clients must handle both JSON and SSE responses. On an ordinary SSE response stream, related notifications precede the final JSON-RPC response, which should end the stream. In this revision, closing that stream cancels its request, and Last-Event-ID replay is unsupported. Older Streamable HTTP examples with session IDs and resumable streams describe a different contract.

Continue when input is required

Multi Round-Trip Requests let tools/call, resources/read, or prompts/get return an InputRequiredResult for missing information. The client may continue with supported inputs, a different JSON-RPC ID, matching inputResponses, and an exact echo of any opaque requestState. This continues the original operation, rather than initiating an unsolicited server call.

Elicitation obtains user input through the client. Form mode collects permitted structured information; URL mode sends the user to an out-of-band interaction for secrets or third-party authorization. Form mode must not request passwords, access tokens, API keys, or payment credentials. Accept, decline, and cancel are different dispositions. Accepting a URL interaction does not prove completion: the server checks when the operation resumes. Neither mode is blanket approval for later actions.

Continuation fields are operation-specific, never shared with concurrent work. Treat returned state as attacker-controlled: authority or business state needs integrity protection and principal, request, and expiry binding. Single-use behavior requires server enforcement; continuation remains optional.

One operation, two request IDs

One operation, two request IDsClient request r1 receives an InputRequiredResult with response ID r1, state sigma and input request q1. The client asks the user for a non-sensitive timezone field. Optional r2 carries the same state and a matched inputResponses disposition. The server checks integrity, principal, original request and expiry. Both exchanges belong to one operation.UserClientServerOne logical operationr1 · initial requestprotocolVersion + clientCapabilitiesInputRequiredResult · response ID r1requestState: σ · input request q1Field: timezone (non-sensitive)Client asks for timezoneaccept / decline / cancelOptional continuation r2 · new RPC IDprotocolVersion + clientCapabilitiesExact σ echo · inputResponses for q1Server re-entry validationIntegrity · principalOriginal request · expiryThe input disposition is not action approval; requestState is not deduplication.
In this missing-field example, r1 and optional r2 belong to the same operation. The client echoes state σ unchanged and matches the input response to q1; the server validates its integrity and binding. The disposition does not determine a universal final outcome.

Sampling requests client-mediated model generation without transferring provider credentials to the server. Existing supported integrations use the continuation pattern, with the client retaining model choice and permission control. However, sampling is deprecated in revision 2026-07-28: new implementations should not adopt it, and existing ones should migrate to direct provider APIs. Deprecated does not mean removed; its specification remains for at least twelve months before removal eligibility.

Authority and application control

Acquire access to a protected server

Authentication establishes identity; authorization permits access. OAuth supports delegated access without giving an application the user's password. An authorization server issues an access token after the relevant checks and grant. A resource server accepts that token to serve protected operations. Scope describes granted permissions using service-defined strings; requesting a scope does not guarantee receiving it. Here, the protected resource server is the MCP service—not necessarily an item read through resources/read.

MCP authorization support is optional; the following flow concerns protected HTTP services. Separating token issuance from capability serving became explicit in the June 2025 revision, which classified MCP servers as OAuth resource servers and added protected-resource metadata. This lets the MCP implementation rely on an authorization service rather than own every identity function.

The client follows two discovery documents to find where it can obtain access. An issuer identifies an authorization server; checking that identity prevents the client from accepting metadata for a different server. Discovery itself grants no access.
DocumentHow it is foundWhat the client establishes
Protected-resource metadataA 401 WWW-Authenticate challenge's resource_metadata URL, preferred when present, or prescribed well-known locationsWhich authorization servers can issue access credentials
Authorization-server metadataThe selected issuer's metadata-discovery procedureAuthorization endpoints; the returned issuer must exactly match the issuer used for discovery

Once the authorization server is known, client registration identifies the application requesting access and its permitted redirect destinations. A Client ID Metadata Document lets an unfamiliar client supply that information through an HTTPS URL hosting JSON metadata. Clients supporting all registration options should prefer existing registration, then supported metadata documents, then dynamic registration. Manual configuration may be necessary. Dynamic registration is deprecated but remains available. Issued registration credentials are tied to their authorization-server issuer; a metadata-document URL is portable. Registration identifies the client—it does not grant access to business operations.

In a browser-based authorization flow, the user signs in and grants access. The authorization server returns a code to the client, which exchanges it for an access token and presents that token to MCP. Proof Key for Code Exchange (PKCE) binds code redemption to a verifier held by the initiating client. The token's audience is its intended recipient: the client requests access for the MCP resource, and the server checks that the token was issued for it. Secure storage and exact redirect validation protect other parts of the exchange.

An invalid or expired token requires HTTP 401; insufficient permission uses 403. A scope challenge can guide a bounded authorization upgrade, but clients should remember failed upgrades rather than loop. Refresh tokens are sensitive and cannot be assumed available. Before code redemption, validate the returned issuer against the recorded authorization attempt, including its required presence when issuer-response support was advertised. Renewing MCP access does not renew an independent backend credential.

Enforce authority at each boundary

A server must not forward its incoming client token to an upstream API. Backend access uses separate authority appropriate to that recipient. Preserve the represented user and acting service instead of silently substituting a broad service account. Distinguish people and actors develops those identities. Tenant context—the organization or customer boundary—must come from verified authentication context and constrain resource lookup and caches, not from a model-proposed tenant identifier.

Issue access, then present it to the intended recipient

Issue access, then present it to the intended recipientAfter authorization, the authorization server issues credential alpha to the client. Alpha is presented only to the MCP resource server, which checks audience and permissions plus operation and target. The handler uses separately obtained backend credential beta with verified tenant and represented-user context. Backend acquisition is outside the diagram, and alpha is not forwarded.Authorization serverAfter authorization flowBackend authority βObtained separatelyAcquisition outside this mapIssue token αRecipient: MCP serverSupply β to handlerHost / clientPresents αMCP resource serverα audience + permissionsHandler: action + targetVerified tenant + userBackend APIChecks β authorityPresent αCall with βα ends at MCP. No α path reaches the backend.Logical roles do not require separate machines or a particular token format.
The authorization server issues the MCP access token α to the client, which presents it to MCP. Backend access uses separately obtained authority β; its acquisition is outside this map. Neither discovery nor token scope alone approves a business action.

Visibility and authority can be restricted independently. Linear documents a read-only endpoint exposing only read tools and, separately, a read-scoped token that cannot reach write APIs on its standard endpoint. The first narrows discovery; the second limits credential authority. A hidden operation should not remain executable merely because a caller already knows its name.

A confused deputy misuses its own authority on behalf of a less-privileged caller. One MCP proxy risk arises when many clients share the proxy's upstream OAuth identity: remembered upstream consent can suppress a new consent screen for an unfamiliar MCP client. The proxy must track user approval per client and bind the returning authorization flow to that approval. Prior consent for one client is not consent for all clients.

Control belongs where the decision can actually be enforced.
DecisionEnforcing component
Enable a server and expose capabilitiesHost configuration and policy
Share model context or release dataHost input assembly and outbound controls
Approve a consequential actionHost approval bound to actor, target, arguments, scope, and lifetime
Accept arguments and current stateServer handler, before protected execution
Permit the backend operationBackend permissions and server-side access checks
Bound files, networks, and resourcesHost, operating system, and service limits

Roots communicate workspace locations, not confinement. They are deprecated in July 2026; new implementations should use tool parameters, resource URIs, or configuration instead. A declared file root cannot restrict an otherwise unrestricted process. Sandboxes and Execution Isolation explains the separate enforcement mechanisms.

Tool-description poisoning places attacker instructions in discovered metadata. Invariant's historical experiments included a nominal arithmetic tool that induced sensitive-file transmission and a cross-server redirection attack that did not require invoking the malicious tool. These findings concern the reported configurations, not every current client. They explain why discovery itself crosses an instruction boundary: retain independent enforcement and keep untrusted content in role, rather than treating server descriptions as privileged instructions.

Execution and failure

Trace one issue creation

To carry out a model-proposed action, the host must connect discovery to dispatch: obtain a tool definition, expose it to the model, check the proposed call, and send accepted arguments through its MCP client. The server then maps the call to its backend and returns the outcome. Consider creating “Fix login” in team-A through a Linear-backed adapter.

The handoffs carry different responsibilities: the host accepts the proposed action, the server validates it for execution, and the adapter interprets the backend’s reply.

The identifiers are deliberately different. call-7 associates the model proposal with its observation. rpc-12 associates a protocol request with its response. op-9 is application bookkeeping for the intended operation, not automatic backend deduplication. A created issue ID identifies the resulting record. Store their relationships explicitly rather than assigning one identifier every meaning.

Linear's API uses a GraphQL mutation, a request to change data, for issue creation. Its response includes success and selected issue fields, but HTTP 200 can also carry partial data and errors. Defaults matter too: omitting stateId selects the team's first Backlog state, or Triage when enabled. The returned issue ID permits a separate read. If the user requested a particular state, check that state explicitly; receiving a valid MCP response does not establish it.

From model proposal to backend result

From model proposal to backend resultDiscovery and host adaptation precede model proposal call-7. The host binds approval as operation op-9 and dispatches MCP request rpc-12. The server validates before Linear issueCreate, interprets the GraphQL payload and correlates rpc-12. A separate conditional read-back checks requested state when a returned issue ID exists. Host presentation associates the outcome with call-7; none of these identifiers supplies backend deduplication.ModelHost / clientServer handlerLinear APItools/listcreate_issue definitionSelected model-format toolProposal call-7Fix login · team-AAccept and record op-9Bind actor, target, arguments,scope and approval lifetimetools/call · rpc-12protocolVersion 2026-07-28clientCapabilitiesValidate argumentsCheck authority and targetissueCreate underbackend authorityPayload: success / issue / errorsReturned issue ID if availableInterpret GraphQL payloadHTTP 200 alone ≠ creationMCP result · response rpc-12Separate read-back only if requested state needs checking and an issue ID existsNew read requestRead issue by IDDomain fieldsRead-back findingsObservation for call-7Backend report / verified statecall-7: model · op-9: application · rpc-12: exchange · issue ID: backend record
This teaching adapter combines documented contracts; it is not an observed execution or Linear’s hosted schema. rpc-12 correlates the MCP response; call-7 correlates the model observation. The dashed read-back is a separate conditional operation. Application op-9 supplies no backend deduplication.

Keep the execution record connected without overclaiming visibility. Trace-context propagation carries execution identity across controlled service boundaries so their records can be joined. It cannot expose an uninstrumented provider's internals, and trace identity is not authorization. Propagate context and observe telemetry develops that mechanism. The user-facing result should distinguish what the backend reported from any separately verified state.

Interpret errors and interrupted requests

Failure handling begins by identifying which boundary supplied the observation. Rejection before dispatch, failure inside a handler, and loss of a response after dispatch require different responses. A single success flag cannot represent all three.

ObservationKnown factResponsible response
Unsupported version or featureThe requested exchange is unsupported.Client selects shared behavior or reports incompatibility.
Authorization rejectionAn access check rejected this request.Resolve identity or permission at that boundary.
JSON-RPC errorThe protocol operation returned an error.Interpret its code and operation-specific meaning.
Tool result with isErrorThe tool reports execution failure.Inspect the handler's failure contract, including partial effects.
Unusable resultThe host cannot safely consume the response.Reject downstream use; do not assume a mutation never happened.
No final responseThe client lacks a completed observation.Preserve uncertainty and investigate external state.

Progress is optional observation during work. The client supplies a progressToken, unique across active requests; notifications report increasing progress and optionally a total and message. A supplied token does not require reports. Without a meaningful total, do not display a percentage. Reports stop at completion and are neither a final result nor a durable job handle.

Set request timeouts and an overall maximum even if progress resets an inactivity timer. Cancellation is binding-specific: stdio uses notifications/cancelled with the outstanding request ID; HTTP closes the request's SSE stream. Servers should stop processing and release resources, but cancellation can arrive after completion or concern work that cannot stop. Clients must handle races and ignore late responses. This is not rollback.

If issue creation loses its final response, the client may have an unknown outcome: creation might not have committed, or it might have committed before delivery failed. July-2026 HTTP reconnection does not replay that response. Searching for a matching record may help investigate, but a match alone does not identify which concurrent attempt created it.

One observation, two possible realities

Example

A missing response cannot distinguish absent work from a committed effect whose result was lost.

Possible paths after dispatch, not measured frequencies. Neither path gives the client a final result; recovery needs independent knowledge of the backend effect.
Read the diagram as text
  • Creation dispatched.
  • No creation committed. Work stops before the effect.
  • Creation committed. The backend record exists.
  • Result delivery lost.
  • Client: no final response. Effect remains unknown to the client.
  • Creation dispatchedNo creation committed: Interruption before commit.
  • Creation dispatchedCreation committed: Execution reaches commit.
  • No creation committedClient: no final response: No result delivered.
  • Creation committedResult delivery lost: Interruption after commit.
  • Result delivery lostClient: no final response: No result delivered.

Idempotency makes repeated attempts represent one logical operation only when the receiving service enforces that contract. A caller identifier must be recorded consistently with the effect, bound to unchanged parameters, and retained for a defined retry window. Logging an identifier or changing the JSON-RPC ID does not do this. Recover when the effect is unknown explains reconciliation. The agent runtime is the application machinery retaining execution state and recovery policy; its implementation belongs in Agent Runtimes and Harness Engineering.

Separate durable tasks from live requests

Some work must remain inspectable after its initiating connection disappears. MCP's maintainers introduced experimental Tasks in November 2025 for ongoing work and later result retrieval. The separately evolving Tasks extension, described here from its draft specification, is optional rather than part of core July-2026 request handling.

With shared extension support, a tools/call can return an ordinary result or a task handle after the task has been durably created. The client retains taskId and polls tasks/get, respecting pollIntervalMs. An input_required task accepts responses through tasks/update. completed contains the original method result, which can still be a tool result with isError; failed carries a protocol error. Ordinary progress notifications are not task progress.

IdentityWhat it representsWhat it does not guarantee
Request IDOne protocol exchangeRetrieval after connection loss
Task IDStored status and result, subject to retentionWorker restart or successful computation
Backend record or operation IDDomain-specific state or actionEquivalence with protocol task status

Task cancellation uses tasks/cancel, not request cancellation. Its acknowledgement confirms receipt, not stopped execution; another terminal outcome remains possible. A client retaining the handle can inspect later status. Retrieval still requires authorization and remains subject to retention: expiry can remove the task, and the extension provides no tasks/list recovery path for a lost handle. Cancellation does not reverse completed backend effects.

The two panels show the same logical task before and after disconnect. With a retained handle, authorized clients can inspect stored task state within retention. Storage does not restart a failed worker or undo backend effects.

Keep protocol status separate from domain status. An invoice, for example, can pass through several business states while its task remains working. Cornelia Davis's Tasks discussion makes this mapping explicit. A durable observation mechanism helps recover knowledge of work; it does not supply the application's entire recovery system.

Verification and choice

Verify the integration and choose its boundary

Verification has four levels. Protocol conformance checks the exchange rules. Shared feature support checks whether both implementations provide the required subset. Semantic agreement checks that operations and representations mean what each side expects. Task usefulness checks the intended external outcome. A connection can pass the first level while failing any of the others.

Use this as a test record for each exact host/client/server combination, not as a populated compatibility claim. Record implementation versions, endpoint or artifact identity, selected protocol revision, and transport. Every entry starts untested; documentation alone changes it to documented, not passed.
PropertyFocused testRequired evidence
Version and transportShared revision; JSON and SSE handling; explicit incompatibilityCaptured exchange and selected wire behavior
CatalogPagination, duplicate names, changes, authorization-scoped cachingComplete inventory and refreshed host view
Primitives and contentRequired tools, resource reads, prompt retrieval, result representationsDecoded artifacts and correct host use
AuthorityAllowed action, denied action, wrong target, insufficient scopeEnforcement result and backend state
ContinuationSupported input, refusal, unsupported feature, concurrent operationsCorrect request association and disposition
InterruptionTimeout, cancellation race, lost response, optional task recoveryHonest outcome status and bounded recovery
Business resultCreate the intended record under permitted authorityBackend receipt, relevant read-back, and accurate presentation

MCP Inspector helps inspect interfaces. Its documented fixtures cover cases such as pagination, structured results, authorization discovery, and client-rejected schemas. That is useful coverage, not a certificate that an application achieved its business goal. Exercise the actual host and backend as well; Exercise real integration boundaries explains why substitute-only tests cannot establish the whole path.

The server interface itself remains a design choice. Block's June 16, 2025 Linear account describes moving from endpoint-shaped tools to consolidated tools and then separate GraphQL read and mutation interfaces. The illustrated assignee query became one request, but the report is not a controlled performance benchmark or a universal recommendation for arbitrary GraphQL. It demonstrates that protocol reuse does not choose useful operation granularity.

Existing APIs can coexist with MCP. Azure API Management's REST wrapper exposes selected API operations as tools, not resources or prompts, with authentication configured separately. Intermediaries also affect execution: Microsoft warns that reading response bodies in policies can introduce buffering that interferes with streaming. An adapter preserves only the behavior it actually implements.

Choose direct integration when tight application ownership, specialized access patterns, or a small capability surface make it simpler. Choose MCP when reusable capability exchange justifies operating and testing the boundary. Compare both under the same task and authority requirements, keeping outcome quality, latency, model-context consumption, maintenance, and compatibility costs separate. A shared protocol is valuable when it reduces repeated work without hiding who owns the remaining decisions.

Open questions

  1. Behavioral portability remains harder than message compatibility. Hosts can differ in resource exposure, catalog refresh, and model-facing adaptation while exchanging valid messages. Progress would mean reproducible cross-host tests of a declared feature subset and equivalent backend outcomes, without requiring identical interfaces.

  2. Useful capability discovery must balance completeness against model-context cost. Loading every endpoint description can be impractical, while progressive disclosure adds selection steps and cache interactions. Progress would demonstrate task coverage, correct tool choice, and bounded context consumption under changing catalogs—not merely smaller initial payloads.

  3. Safe recovery across independent services still needs stronger business contracts than correlation alone. Durable task status can preserve observations, but external effects may lack enforced deduplication or a decisive reconciliation interface. Progress would expose operation-specific retry, retention, and effect-status guarantees that remain valid across crashes and concurrent attempts.

Follow the curated reading path through the speakers and demonstrations behind this entry.

20 min

AI Engineer World's Fair 2025 · 2025

Building Protected MCP Servers

Den Delimarsky (DEVDIV) · Julia Kasper · Den Delimarsky

Cited in this entry

Explains the historical separation of authorization-server and resource-server responsibilities, with a concrete metadata and protected-access demonstration.

Watch talk

Explore more talks

The rest of the library, beyond the curated path. Cited talks support this entry; reviewed transcripts were processed in full. Metadata candidates have not been reviewed as sources or verified as topic members.

162 matching talks

Every catalogued talk on this subject: APIs, MCP, and protocols

TalkSpeakerEventYear
Harald KirschnerAI Engineer World's Fair 20252025
Marlene Mhangami, Liam HamptonAI Engineer Europe 20262026
AI Engineering 101

Transcript reviewed

Noah HeinAI Engineer Summit 20232023
Roy DerksAI Engineer Summit 20252025
Philipp SchmidAI Engineer World's Fair 20252025
Alex GavrilescuAI Engineer Code 20252025
Harald KirschnerAI Engineer World's Fair 20252025
Sam MorrowAI Engineer Europe 20262026
Leonie MonigattiAI Engineer Europe 20262026
Ankur GoyalAI Engineer World's Fair 20252025
MCP is all you need

Transcript reviewed

Samuel ColvinAI Engineer World's Fair 20252025
Lovina DmelloAI Engineer World's Fair 20262026
Simon WillisonAI Engineer World's Fair 20242024
Tun Shwe, Jeremy FrenayAI Engineer Europe 20262026
Fouad MatinAI Engineer World's Fair 20252025
Liam McGarrigleAI Engineer Europe 20262026
Security Firewall for Agents

Transcript reviewed

Ryan DahlAI Engineer World's Fair 20262026
Vinoth GovindarajanAI Engineer World's Fair 20262026
Mike ChristensenAI Engineer Europe 20262026
Bennet FennerAI Engineer Europe 20262026
Nishant GuptaAI Engineer World's Fair 20262026
LLM Evals That Work IRL

Transcript reviewed

Aparna Dhinkaran, Aparna DhinakaranAI Engineer World's Fair 20242024
Damien MurphyAI Engineer World's Fair 20252025
David CramerAI Engineer World's Fair 20252025
Kim MaidaAI Engineer World's Fair 20262026
Jan CurnAI Engineer World's Fair 20252025
Antje BarthAI Engineer World's Fair 20252025
Ravi MadabhushiAI Engineer World's Fair 20262026
Tushar JainAI Engineer World's Fair 20262026
Harald Kirschner, Christopher HarrisonAI Engineer World's Fair 20252025
Siddharth AhujaAI Engineer World's Fair 20252025
Sarmad QadriAI Engineer World's Fair 20252025
Rachel Lee Nabors (RL Nabors)AI Engineer Europe 20262026
Yogendra MirajeAI Engineer World's Fair 20252025
Jared HansonAI Engineer World's Fair 20252025
Diego CarpenteroAI Engineer Europe 20262026
Yohei NakajimaAI Engineer World's Fair 20262026
Henry MaoAI Engineer World's Fair 20252025
Cornelia DavisAI Engineer Code 20252025
Du’An Lightfoot, Banjo ObayomiAI Engineer World's Fair 20252025
Ilan BigioAI Engineer Summit 20252025
Nimrod HauserAI Engineer Europe 20262026
Theodora ChuAI Engineer World's Fair 20252025
Pietro ZulloAI Engineer World's Fair 20262026
Matt CareyAI Engineer Europe 20262026
Michael HablichAI Engineer Europe 20262026
Dan MasonAI Engineer World's Fair 20252025
Pedro RodriguesAI Engineer Europe 20262026
Rafael LeviAI Engineer Europe 20262026
The Future of MCP

Metadata candidate

David Soria ParraAI Engineer Europe 20262026
Ruben CasasAI Engineer Europe 20262026
Kent C. DoddsAI Engineer World's Fair 20252025
Ronan McGovernAI Engineer World's Fair 20252025
Ido Salomon, Liad YosefAI Engineer World's Fair 20262026
Liad Yosef, Ido SalomonAI Engineer Europe 20262026
Garrett GalowAI Engineer Europe 20262026
Merve NoyanAI Engineer Europe 20262026
Alex Volkov, Benjamin EckelAI Engineer World's Fair 20252025
Tobin SouthAI Engineer World's Fair 20252025
Frédéric BartheletAI Engineer Europe 20262026
Ari HeljakkaAI Engineer World's Fair 20252025
Sanja GrbicAI Engineer World's Fair 20262026
Barry Zhang, Mahesh MuragAI Engineer Code 20252025
Ezra Tanzer, Dan ArpinoAI Engineer World's Fair 20262026
Brendan O'LearyAI Engineer Europe 20262026
Cedric VidalAI Engineer World's Fair 20252025
Stephen ChinAI Engineer World's Fair 20252025
Zach BlumenfeldAI Engineer World's Fair 20252025
Uday Kiran Medisetty, Adam HudaAI Engineer World's Fair 20262026
Shawn "swyx" WangAI Engineer Europe 20262026
Armanas PovilionisAI Engineer World's Fair 20262026
Nick Nisi, Lizzie SiegleAI Engineer World's Fair 20252025
Olivier Leplus, Yohan LasorsaAI Engineer Europe 20262026
Nick Nisi, Zack ProserAI Engineer World's Fair 20252025
Beyang LiuAI Engineer Code 20252025
Anthropic for VPs of AI

Metadata candidate

Alexander Bricken, Joe BayleyAI Engineer Summit 20252025
Frank CoyleAI Engineer World's Fair 20262026
Abhishek BhardwajAI Engineer World's Fair 20252025
Marlene MhangamiAI Engineer Europe 20262026
Filip KozeraAI Engineer World's Fair 20252025
Louis-François Bouchard, Paul Iusztin, Samridhi VaidAI Engineer Europe 20262026
Julián Duque, Anush DSouzaAI Engineer World's Fair 20252025
Jeff NgAI Engineer World's Fair 20262026
Rita KozlovAI Engineer World's Fair 20252025
Angie JonesAI Engineer World's Fair 20262026
Cedric VidalAI Engineer World's Fair 20252025
Eric ZakariassonAI Engineer Europe 20262026
Nick TaylorAI Engineer Europe 20262026
Codex and Subagents

Metadata candidate

Vaibhav Srivastav, Katia Gil GuzmanAI Engineer Europe 20262026
Codex, Behind the Harness

Metadata candidate

Dominik KundelAI Engineer World's Fair 20262026
Šimon PodhajskýAI Engineer Europe 20262026
Jon Peck, Christopher HarrisonAI Engineer World's Fair 20252025
Containing Agent Chaos

Metadata candidate

Solomon HykesAI Engineer World's Fair 20252025
Context Is the New Code

Metadata candidate

Patrick DeboisAI Engineer Europe 20262026
Stephen ChinAI Engineer World's Fair 20262026
Zeke SikelianosAI Engineer World's Fair 20252025
Ben HylakAI Engineer World's Fair 20262026
Shawn Wang (swyx)AI Engineer World's Fair 20252025
Barry ZhangAI Engineer Summit 20252025
Katelyn LesseAI Engineer Code 20252025
May WalterAI Engineer World's Fair 20262026
Mounir MouawadAI Engineer World's Fair 20252025
Gaurav MishraAI Engineer World's Fair 20262026
KitzeAI Engineer World's Fair 20252025
Alex AtallahAI Engineer World's Fair 20252025
Gateways are All You Need

Metadata candidate

Karan SampathAI Engineer Europe 20262026
Keegan McCallumAI Engineer World's Fair 20262026
KP Sawhney, Ian BallantyneAI Engineer Europe 20262026
Ash Prabaker, Andrew WilsonAI Engineer Europe 20262026
Kyle Jaejun LeeAI Engineer World's Fair 20262026
Identity for AI Agents

Metadata candidate

AI Engineer Code 20252025
Intro to GraphRAG

Metadata candidate

Zach BlumenfeldAI Engineer World's Fair 20252025
Suman DebnathAI Engineer World's Fair 20252025
Alex LissAI Engineer World's Fair 20252025
Robert ChandlerAI Engineer World's Fair 20252025
Sally Ann O'MalleyAI Engineer Europe 20262026
Adam BehrensAI Engineer World's Fair 20252025
Vincent KocAI Engineer Europe 20262026
Eashan SinhaAI Engineer World's Fair 20252025
Manuel OdendahlAI Engineer World's Fair 20252025
Drasko ProfirovicAI Engineer World's Fair 20262026
Mark Bain, Vasilije Markovic, Daniel Chalef, Alex GilmoreAI Engineer World's Fair 20252025
Sonny Merla, Mauro Luchetti, Mattia RedaelliAI Engineer Europe 20262026
Christopher HarrisonAI Engineer World's Fair 20252025
Juan Herreros ElorzaAI Engineer Europe 20262026
Yuval BelferAI Engineer World's Fair 20252025
Jon PeckAI Engineer World's Fair 20252025
Michael YuanAI Engineer World's Fair 20252025
Joshua SnyderAI Engineer Europe 20262026
Eno ReyesAI Engineer World's Fair 20252025
Skills are the New SDKs

Metadata candidate

Elvin AghammadzadaAI Engineer World's Fair 20262026
Louis Knight-WebbAI Engineer Europe 20262026
Al HarrisAI Engineer Code 20252025
Brandon WaselnukAI Engineer Europe 20262026
Vikash Agrawal, LindaAI Engineer World's Fair 20252025
Sohail Shaikh, Ankush RastogiAI Engineer World's Fair 20262026
Christopher Harrison, John PeckAI Engineer World's Fair 20252025
Corey GallonAI Engineer World's Fair 20262026
Beyang LiuAI Engineer World's Fair 20252025
Justin SchroederAI Engineer World's Fair 20262026
Junyang LinAI Engineer World's Fair 20252025
William LyonAI Engineer World's Fair 20252025
Paul Klein IVAI Engineer World's Fair 20252025
Manoj Nair, Ezra, RandallAI Engineer World's Fair 20262026
Rafal Wilinski, Vitor BaloccoAI Engineer World's Fair 20252025
Jon PeckAI Engineer World's Fair 20252025
Erik HanchettAI Engineer World's Fair 20262026
Harald KirschnerAI Engineer World's Fair 20252025
Itamar FriedmanAI Engineer World's Fair 20252025
Lucas PalmaAI Engineer World's Fair 20262026
Lei ZhangAI Engineer Code 20252025
Why Agent Engineering

Metadata candidate

swyx (Shawn Wang)AI Engineer Summit 20252025
Sunil Pai, Matt CareyAI Engineer Europe 20262026
Zach BlumenfeldAI Engineer Europe 20262026
Kevin HouAI Engineer World's Fair 20252025
Your agent is blindfolded

Metadata candidate

Johan LajiliAI Engineer Europe 20262026
Rafael LeviAI Engineer Europe 20262026
Hamza TahirAI Engineer World's Fair 20262026
Zack ProserAI Engineer Europe 20262026
Ramana Siddanth EmaniAI Engineer World's Fair 20262026
Mike PhippsAI Engineer World's Fair 20262026
Lisa OrrAI Engineer Code 20252025

References

Coverage and source review
Processed transcripts
50 processed in full · 5 in the curated path
Automated source review
Passed
Metadata candidates
117 unreviewed; not verified topic membership
Corpus version
1bd8e407b26a07b33815594e1b2db5f41827119a2b3cb6fbf240f9fc571fc767

Automated review checks source support; it is not publication approval.

A synthesis of selected conference talks and technical references. Citations link to the source material; they do not imply that every talk on this subject is included.

  1. Model Context Protocol: Specification and trust principles, revision 2026-07-28

    MCP exposes resources for context and data, prompts for reusable messages and workflows, and tools for executable functions. These primitives have different jobs even when they concern the same underlying service. The specification requires user control over data access and operations, explicit consent before sharing data with servers, and careful handling of arbitrary tool execution. It also states that the protocol cannot itself enforce all trust principles: implementers need authorization flows, access controls, and clear interfaces. Interoperability does not eliminate the host’s security responsibilities.

  2. MCP server — Linear documentation

    Linear documents a centrally managed Streamable HTTP MCP service with tools for finding, creating, and updating issues, projects, and comments. Its read-only endpoint exposes only read tools. Alternatively, requesting only the read OAuth scope on the standard endpoint produces a token that cannot reach write APIs. The documentation separately supplies client-specific setup instructions and workflow examples, including reviewing proposed issue comments before applying them.

  3. A2A & MCP: Automating Business Processes with LLMs

    The speaker positions MCP, the Model Context Protocol, as a standard interface to external tools and context, and A2A as a remote-agent interface; locally controlled functions and agents often do not need either protocol.

  4. Model Context Protocol: Architecture, revision 2026-07-28

    MCP separates a host application, its clients, and servers that expose capabilities. The host coordinates model integration, context aggregation, permissions, and consent; each client communicates with one server. Servers supply resources, tools, and prompts and may run locally or remotely. The 2026-07-28 architecture is explicitly stateless: every request carries protocol version and capabilities. Servers request client input through an InputRequiredResult in a reply. MCP standardizes communication; it does not supply the application’s planning policy or decide which actions are appropriate.

  5. Function Calling is All You Need

    Raw function calling expresses the model's intended action; application code must execute it. In the speaker's API terminology, tools are a broader category that also includes hosted capabilities.

  6. LangChain MCP Adapters

    LangChain's adapter library converts MCP tools into LangChain tools. Its published client example loads tools from an MCP session and separately passes those tools to create_agent with a selected model. Another example aggregates tools from a local math server and an HTTP weather server. The separation makes the host-side adaptation visible: discovering protocol operations and supplying model-facing tool definitions are distinct steps.

  7. Building (Agents) with Model Context Protocol

    A client can invoke MCP functions deterministically, but direct server-to-server data transfer was not described as a first-class protocol feature.

  8. A Common Protocol for Languages

    On June 27, 2016, Microsoft announced collaboration with Red Hat and Codenvy around a common language-server protocol. Editors exchange JSON-RPC messages with language services for operations such as finding definitions and receiving diagnostics. Separating the editor from language-specific analysis lets one language-server implementation serve multiple development tools.

  9. MCP Specification — revision 2025-06-18

    The MCP specification explicitly identifies the Language Server Protocol as an inspiration: LSP standardizes language support across development tools, while MCP standardizes integrating additional context and tools across AI applications.

  10. Function calling and other API updates

    OpenAI’s June 13, 2023 announcement introduced function calling in Chat Completions. Developers supplied function descriptions through JSON Schema, and supported models could return JSON arguments for a selected function. This documents a model-facing tool interface predating MCP’s public introduction.

  11. Introducing the Model Context Protocol

    Anthropic publicly introduced and open-sourced MCP on November 25, 2024, identifying repeated custom integration with isolated data sources as its motivating problem. The launch included specifications and SDKs, local-server support in Claude Desktop, and reference servers for systems including GitHub, Slack, and Postgres. Remote production deployment tooling was described as forthcoming.

  12. MCP Key Changes — revision 2025-03-26

    Relative to revision 2024-11-05, the March 2025 revision added an OAuth-based authorization framework and replaced the earlier HTTP-plus-SSE transport with Streamable HTTP. It also introduced tool annotations and JSON-RPC batching.

  13. The 2026-07-28 Specification

    Lead maintainers David Soria Parra and Den Delimarsky announced the published revision on July 28, 2026. They describe the move from stateful bidirectional communication to self-describing requests as a response to server reliability and scaling difficulties. Removing protocol sessions permits requests to reach different instances without protocol-session storage. Application state remains possible through explicit handles. Multi Round-Trip Requests replace held-open reverse requests, while routing headers and cache hints make ordinary HTTP infrastructure more useful. The announcement also acknowledges SDK migration costs.

  14. Expose REST API in API Management as an MCP server

    Azure API Management can expose selected operations of an existing managed REST API as MCP tools. The documented REST-to-MCP feature supports tools but not resources or prompts. Operators separately configure access and authentication policies. Microsoft warns that reading context.Response.Body in MCP policies triggers buffering that can interfere with streaming.

  15. Model Context Protocol: Tools, revision 2026-07-28

    Servers expose tools/list discovery and tools/call invocation. Definitions contain a name, description, input JSON Schema, and optional output schema; output-schema results must conform and clients should validate them. Protocol errors differ from execution failures returned with isError. Names are scoped to one server, so aggregation needs disambiguation. The available catalog can change over time or with request authorization, but not implicitly with connection state. Deterministic ordering is recommended. Servers advertising listChanged should notify clients subscribed through subscriptions/listen with toolsListChanged. Clients still consume pagination and caching rules rather than assuming the first list is permanently complete. Tool annotations are untrusted unless their server is trusted.

  16. GitHub MCP Server — issue-comment implementation

    GitHub’s add_issue_comment implementation exposes repository owner, repository name, issue number, and comment content through an MCP tool. In the comment-only branch, it validates arguments, obtains a GitHub API client, invokes Issues.CreateComment, checks for HTTP 201, and returns the created comment’s ID and HTML URL as serialized JSON in a text tool result. The current tool also supports reactions, with additional argument constraints.

  17. MCP Resources, revision 2026-07-28

    Resources expose addressable information identified by URIs. resources/list discovers descriptions; resources/read supplies a URI and returns one or more content entries containing text or base64 binary data, optionally with MIME types. resources/templates/list exposes URI templates whose variables select parameterized resources; resolving a template yields an address to read, not a tools/call operation. The host decides which retrieved content enters model context. A URI is not necessarily an ordinary web URL: schemes can represent files, repositories, or application-specific data. An https resource can also be fetched directly when appropriate. Read results may require additional input through InputRequiredResult.

  18. Building (Agents) with Model Context Protocol

    The distinction separates model-selected actions from application-controlled context handling.

  19. Backlog.md: Terminal Kanban Board for Managing Tasks with AI Agents — Alex Gavrilescu, Funstage

    Backlog.md uses MCP resources for workflow instructions, with an overview directing agents to guides for creation, execution, and completion.

  20. MCP Prompts, revision 2026-07-28

    prompts/list discovers server-defined templates and their named argument declarations. The client selects a prompt and supplies argument values in prompts/get; the server resolves its template into messages. The result may include a description and user or assistant messages carrying text, images, audio, resource links, or embedded resource content. InputRequiredResult can request missing information before resolution. User-controlled describes selection of the prompt, not authorship of its server-provided content. Retrieval returns a message structure; the host still decides whether and how to supply it to a model.

  21. Building (Agents) with Model Context Protocol

    MCP prompts can expose reusable, user-invoked templates for workflows and formatting conventions.

  22. Implementing Remote Procedure Calls — Birrell and Nelson

    Birrell and Nelson’s February 1984 paper describes Xerox PARC’s Cedar RPC implementation. Remote procedure calls transfer arguments to another execution environment and return its results. The project sought to make distributed programming accessible without requiring communication expertise, while explicitly retaining fundamental difficulties such as timing and independent component failures. The authors acknowledge earlier RPC work rather than claiming to originate the idea.

  23. JSON-RPC 2.0 Specification

    The JSON-RPC Working Group defines transport-independent JSON messages for requesting operations and returning results or errors. The specification records March 26, 2010 as its origin date, based on a May 24, 2009 version, and January 4, 2013 as its update date. Its published subtraction example demonstrates request–response correlation without prescribing HTTP, application authorization, or business semantics.

  24. MCP Base Protocol: messages and per-request metadata

    MCP requests carry a method and a non-null string or integer ID unique among the sender's outstanding requests. A response repeats that ID and carries a result or error; an unreadable malformed request ID is the error exception. Errors contain an integer code and message, optionally data. Notifications carry no ID and receive no response. Core results distinguish complete from input_required. Each request includes protocolVersion and clientCapabilities metadata; missing required fields produce -32602. A required but undeclared client capability produces -32021 with requiredCapabilities. HTTP uses 400 for those metadata/capability errors. Servers cannot infer capability or identity state from earlier messages on a connection.

  25. MCP Versioning and Compatibility, revision 2026-07-28

    Every request declares a protocol version; there is no connection-scoped negotiation handshake. UnsupportedProtocolVersionError (-32022) lists supported versions. A client should retry using a mutually supported version or surface incompatibility. server/discover is mandatory for servers but optional before other client requests. Optional extensions are advertised through capabilities; when only one party supports an extension, the supporting party must use core behavior or reject the request. Earlier initialization-based revisions remain a separate compatibility mode with transport-specific detection.

  26. MCP Lifecycle — revision 2025-06-18

    The client begins with initialize containing its supported protocol version, capabilities, and implementation information. The server returns its version and capabilities; it must echo a supported requested version or return another version it supports. A client unable to support that response should disconnect. After success, the client sends notifications/initialized. Before readiness, requests should be limited to the specified ping and logging exceptions. Normal operations must respect negotiated features and version. No MCP shutdown method is defined; termination uses the transport. Implementations should configure request timeouts, send cancellation when a timeout expires, and stop waiting. Progress may reset a timeout, but an overall maximum should remain.

  27. Supporting protocol revision 2026-07-28 — MCP TypeScript SDK

    The TypeScript SDK migration guide distinguishes having modern-capable packages from selecting the modern wire protocol. A hand-constructed client defaults to the legacy initialization flow; versionNegotiation can explicitly select automatic discovery or pin 2026-07-28. A modern-only pin rejects a legacy-only server. Automatic negotiation does not interpret HTTP 401 or 403 as evidence that the server requires an older protocol: it reports authorization failure instead. Network outages and server failures likewise have separate handling.

  28. The MCP Registry

    The MCP Registry stores server metadata, including package or remote-endpoint locations and installation configuration, rather than hosting server binaries. Package registries retain the executable artifacts. Downstream catalogs can add curation and security checks, while private organizations can maintain separate registries. Namespace verification associates a publisher with a GitHub account or domain; security scanning is delegated to package registries and downstream aggregators.

  29. MCP Pagination, revision 2026-07-28

    List operations including tools/list use opaque cursors. A response with nextCursor indicates another page, and the client supplies that token as cursor on the next request. The server determines page size. Clients must not parse or alter cursors or assume a fixed page length; even an empty string is a valid cursor. A missing nextCursor ends enumeration. Invalid cursors should produce -32602.

  30. MCP Caching, revision 2026-07-28

    Complete discover/list/read results carry ttlMs and cacheScope. Cache identity includes the method and result-affecting parameters; private entries cannot cross authorization contexts. TTL is a freshness hint, not a promise that content remains unchanged. Clients should re-fetch stale data when needed rather than treat TTL as a background polling schedule. Relevant notifications invalidate even fresh entries. Pagination caches pages independently without cross-page consistency; invalid cursors require discarding pages and restarting enumeration. input_required results and retries carrying inputResponses or requestState are not cacheable.

  31. Subscriptions — MCP 2026-07-28 specification source

    subscriptions/listen replaces the former resources/subscribe operation and HTTP GET notification endpoint. Clients request notification categories or particular resource URIs. The first subscription message acknowledges the subset the server will honor; clients should inspect that subset rather than assume every request was accepted. Notifications carry the originating subscription request ID in metadata, allowing concurrent streams to be distinguished, including on shared stdio. Cancellation or transport loss ends the subscription. A server-initiated graceful ending should return a completion response before closure; reconnecting stdio clients must subscribe again.

  32. Model Context Protocol: Transport overview, revision 2026-07-28

    Transport bindings carry the same JSON-RPC protocol semantics through different channels. The stdio binding uses newline-delimited messages over a client-launched subprocess’s standard streams. Streamable HTTP sends messages by POST to one MCP endpoint, with replies as JSON or request-scoped SSE streams. Every request carries version and capabilities in its body metadata. The revision explicitly contrasts this with earlier connection-scoped initialize handshakes. Transport choice changes framing, deployment, and cancellation mechanics; it does not change a tool’s business meaning.

  33. MCP Transports — revision 2025-06-18

    stdio launches a server subprocess and exchanges newline-delimited JSON-RPC over its standard streams; stdout is protocol-only and stderr may carry logs. Streamable HTTP uses one endpoint: each client message is a POST, and request responses may be JSON or Server-Sent Events carrying protocol messages. Clients must support both. Servers must validate Origin and should authenticate connections and bind local servers to localhost. Optional Mcp-Session-Id values must accompany subsequent requests; a session-related 404 requires fresh initialization. Subsequent HTTP requests carry MCP-Protocol-Version. Disconnection should not mean cancellation. Optional SSE event IDs and Last-Event-ID permit replay on the interrupted stream. POST-stream reverse requests should relate to the originating request; optional GET streams may carry unrelated server requests.

  34. MCP TypeScript SDK: local subprocess launch and environment

    The stdio client launches a configured executable with explicit arguments and connects its standard streams. Its default environment is an allowlist, not the entire parent environment; caller-supplied env entries are merged into it. Supplying an API key therefore exposes that credential to the launched server process, while omitted secrets are not automatically inherited by this implementation. The working directory can be configured or inherited. Launch uses shell:false, which avoids implicit shell interpretation but does not establish that the executable or package is trustworthy or sandboxed.

  35. Connecting to remote MCP servers: endpoint identity and permissions

    Remote MCP servers run on internet-hosted infrastructure rather than being installed and launched on each client device. Connecting selects an endpoint and grants access through the server's authentication mechanism; the guide directs users to verify server authenticity and review requested permissions. This differs from approving a local executable and its process privileges. Remote authentication can control account access but does not prove server code is benign, while local execution does not inherently prevent network communication or data disclosure.

  36. MCP Streamable HTTP: results and disconnected requests

    An ordinary request receives either one JSON response or a request-scoped SSE stream carrying related notifications before its final JSON-RPC response. Clients must support both response formats. Progress travels on the originating request's stream, not subscriptions/listen. The final response should terminate the stream. In revision 2026-07-28, resumable SSE using Last-Event-ID is unsupported. Closing the SSE response stream must be treated as cancellation of that request; the server should stop its work as soon as practical and must send no further messages for it. Consequently, reconnecting does not provide core replay of a lost response; later retrieval requires a separate durable mechanism.

  37. Multi Round-Trip Requests — MCP 2026-07-28

    Multi Round-Trip Requests let tools/call, resources/read, and prompts/get return input_required instead of completing. The client gathers requested inputs and retries the original operation with a different JSON-RPC ID, matching inputResponses, and an exact echo of any opaque requestState. These fields belong only to that operation, not concurrent requests. Servers must not request unsupported client features or assume the client will continue. Returned requestState is attacker-controlled on re-entry: state influencing access or business logic requires integrity protection. Principal, expiry, and original-request binding limit replay, but single-use consumption still requires server-side enforcement.

  38. MCP Elicitation, revision 2026-07-28

    Elicitation lets a server ask the user for missing information through the client. In this revision an InputRequiredResult carries elicitation/create. Form mode requests structured user input; URL mode directs the user to an out-of-band interaction for secrets or third-party authorization. Accept, decline, and cancel are distinct results. In URL mode, accepting means consenting to the interaction, not proving it completed; the server checks completion when the original operation is retried. This flow is separate from authorizing the MCP client to access the MCP server.

  39. MCP Sampling, revision 2026-07-28

    Sampling is deprecated as of revision 2026-07-28: new implementations SHOULD NOT adopt it, and existing implementations SHOULD migrate to direct LLM provider APIs. It remains specified for at least twelve months after this revision before becoming eligible for removal. For existing supported integrations, a server returns InputRequiredResult containing sampling/createMessage; the client supplies generated output when retrying the original operation. The client retains model access, selection and permission control without giving the server provider credentials. Model hints and cost, speed and capability preferences are advisory. This continuation differs from the server independently calling a provider API.

  40. RFC 6749 — OAuth 2.0 Authorization Framework

    OAuth separates the resource owner, the client requesting access on that owner's behalf, the resource server accepting access tokens, and the authorization server issuing them after authentication and authorization. Its example delegates access to protected photographs without giving the client the owner's password. Scope describes requested or granted access using authorization-server-defined strings. The authorization server may grant less access than requested and must report a differing granted scope.

  41. MCP Authorization — revision 2025-06-18

    Authorization is optional; supported HTTP implementations should follow this profile, while stdio should obtain credentials from the environment. A protected MCP server is an OAuth resource server. Clients discover authorization servers through protected-resource metadata, including a metadata location in a 401 WWW-Authenticate challenge, then obtain authorization-server metadata. Clients must send the intended MCP server as resource in authorization and token requests, use PKCE, and include bearer authorization on every HTTP request. Servers must validate tokens for their own audience and must not pass them through upstream; upstream access uses a separate token. The profile distinguishes 401 for required or invalid authorization, 403 for insufficient permissions or scopes, and 400 for malformed authorization requests.

  42. MCP Key Changes — revision 2025-06-18

    The June 2025 revision explicitly classified MCP servers as OAuth resource servers and added protected-resource metadata for discovering authorization servers. It required resource indicators to constrain the intended token recipient. The same revision added structured tool output, elicitation, and resource links, required the negotiated version in subsequent HTTP requests, and removed JSON-RPC batching.

  43. Authorization — MCP 2026-07-28

    The HTTP authorization profile distinguishes invalid or expired tokens, which require HTTP 401, from insufficient permissions or scopes, which use 403. An insufficient_scope challenge can identify the permissions needed for the current operation. A client can seek increased authorization and retry, but should bound attempts and remember failed scope upgrades. Challenge scopes need not have a fixed subset relationship with advertised scopes_supported. Refresh tokens must be protected and their issuance cannot be assumed. Before redeeming an authorization code, clients validate a returned issuer against the issuer recorded for that authorization attempt; advertised issuer support also requires the response parameter to be present.

  44. Authorization Server Discovery — MCP 2026-07-28

    Protected-resource metadata tells an MCP client which authorization servers can issue access credentials. Clients must support discovery through a 401 WWW-Authenticate resource_metadata URL and through prescribed well-known locations, preferring the challenge URL when present. They then retrieve the selected authorization server's metadata using OAuth or OpenID Connect discovery rules. The metadata issuer must exactly match the issuer used to construct the discovery URL; mismatches must be rejected. Multiple listed authorization servers remain independent, with separate registration credentials and tokens.

  45. Client Registration — MCP 2026-07-28 specification source

    A Client ID Metadata Document lets an unfamiliar OAuth client identify itself by an HTTPS URL hosting JSON metadata, including its client ID, name, and permitted redirect URIs. Supporting authorization servers validate the document's identity and requested redirect. Clients supporting all registration options should prefer existing pre-registration, then supported metadata documents, then dynamic registration, with manual configuration when necessary. Dynamic Client Registration is deprecated but remains available. Persisted issued credentials are bound to their authorization-server issuer; portable metadata-document URLs do not require re-registration when the authorization server changes.

  46. Model Context Protocol: Authorization security considerations, revision 2026-07-28

    MCP authorization requires servers to validate that an incoming access token was issued for that server. Clients identify the target resource when requesting authorization; servers must not pass an incoming client token through to an upstream API, whose access token is separate. PKCE binds authorization-code redemption to a verifier held by the initiating client, reducing interception and injection risks. The specification also covers secure token storage, exact redirect validation, and confused-deputy risks when a proxy authorizes access through third-party systems.

  47. Your Insecure MCP Server Won't Survive Production — Tun Shwe, Lenses

    The illustrated flow combines discovery, PKCE, user consent, MCP token validation, and a separate token exchange for upstream access.

  48. OWASP Multi-Tenant Security: tenant context and resource access

    Tenant context should originate in verified authentication claims or session state, not an unvalidated header or model-proposed tenant ID. Validate tenant status, propagate that context through application layers, and reset request-local context after use. Resource lookup combines tenant identity with resource identity and enforces authorization at the data-access layer. Row-level database policies and tenant-scoped repositories can prevent a valid caller from selecting another tenant's record merely by changing its ID. Cache keys and storage access need the same separation.

  49. MCP Security Best Practices: per-client proxy consent

    A proxy can use one static upstream OAuth client ID while accepting many dynamically registered MCP clients. An upstream consent cookie for that static ID may suppress a new consent screen, allowing an unfamiliar MCP client to exploit authority previously granted by the user. The proxy must track approved client IDs per user and check approval before upstream authorization. Consent identifies the client, requested upstream scopes, and registered redirect destination. Exact redirect validation and request-bound state checks connect approval to the returning authorization flow. An upstream remembered consent is not consent for every MCP client. Local server launch is code execution with client privileges. Hosts must obtain configuration consent and should restrict filesystem, network and process access through operating-system sandboxing.

  50. The Protection of Information in Computer Systems

    Saltzer and Schroeder describe complete mediation, fail-safe defaults and least privilege: check authority for accesses, deny absent permission, and limit a component’s granted powers. These principles apply during recovery as well as ordinary execution. In an agent loop, tool proposals and retrieved instructions must therefore pass an independently enforced authorization boundary before they can affect protected resources. Model capability does not establish the caller’s authority.

  51. Your Agent Didn’t Fail. Your Harness Did.

    Approval must remain bound to one specific action and its scope, identity, arguments, and lifetime; expiration should terminate the approval path.

  52. MCP Roots, revision 2026-07-28

    Roots communicate workspace locations from a client to a server; they are informational guidance, not an access-control mechanism. The 2026-07-28 specification marks Roots deprecated: new implementations should not adopt it, while existing implementations should migrate to tool parameters, resource URIs or server configuration. Supporting clients can return file-URI roots through the per-request capability and InputRequiredResult flow. Clients remain responsible for permissions, URI validation and access controls; servers should respect boundaries and validate paths. Declaring a root does not alter operating-system permissions or confine an unrestricted subprocess.

  53. Invariant Labs: MCP Security Notification—Tool Poisoning Attacks

    Invariant's original experiments place malicious instructions in a tool description supplied by an attacker-controlled MCP server. In the reported Cursor demonstration, a nominal arithmetic tool induces sensitive-file reads and transmission through an additional argument. The report describes a confirmation interface that did not expose the complete sensitive input. A second experiment uses one server's description to redirect email sent through another server's legitimate tool; invoking the malicious tool is unnecessary. The authors also identify replacement of previously approved descriptions as a later compromise path.

  54. AI Engineering with the Google Gemini 2.5 Model Family

    In the described MCP integration, the client discovers server tool schemas, supplies them to the model, and dispatches model-selected calls through the MCP client.

  55. Getting started — Linear GraphQL API

    Linear publishes an issueCreate mutation supplying a title, description, and teamId and requesting success plus the created issue's ID and title. A separate issue query retrieves a record by identifier. Without stateId, creation uses the team's first Backlog state, or Triage when that feature is enabled. Linear also warns that GraphQL can return HTTP 200 with partial data and an errors array, so HTTP success alone is insufficient. The API supports OAuth and personal API keys independently of any MCP wrapper.

  56. Your Agent Didn’t Fail. Your Harness Did.

    Trace one real run from trigger identity through inherited state, authority, execution attempts, and surviving external evidence.

  57. Making retries safe with idempotent APIs — Amazon Builders' Library

    A caller-provided request identifier expresses that repeated requests represent the same logical operation. Identical parameters alone cannot establish this: a user may intentionally request two identical resources. The server must coordinate recording the identifier with performing the mutation atomically, return a semantically equivalent result for a retry, and reject reused identifiers paired with different intent or parameters. Retention of identifiers also needs a defined lifetime. These semantics let an agent runtime retry an uncertain tool response without silently turning one authorized operation into two.

  58. OpenTelemetry: Context propagation

    Context propagation connects work across service boundaries by carrying trace and parent-span identity to the receiving process. With W3C Trace Context, the sender injects traceparent and the receiver extracts it so downstream spans belong to the same request. Trace and span identifiers can also correlate logs with that execution. Without propagation, individually instrumented services can still produce disconnected records. Incoming trace context is not inherently trustworthy, and propagated baggage can leak sensitive information; correlation metadata needs an explicit trust boundary too.

  59. Tools — Model Context Protocol specification 2025-06-18

    MCP tools expose names, descriptions, and input schemas, with optional output schemas for structured results. Tool execution errors can be returned with isError, distinct from protocol errors. The specification requires servers to validate inputs and implement access controls, and recommends client-side result validation and tool timeouts. Tool annotations are untrusted unless supplied by a trusted server. Standardizing discovery and invocation does not itself grant authority: the host still decides what may execute and when a human can deny a proposed action.

  60. MCP tools: application security responsibilities

    MCP requires servers to validate tool inputs, enforce access controls, rate-limit invocations, and sanitize outputs. Clients should expose inputs before execution, seek confirmation for sensitive operations, validate results before passing them to the model, impose timeouts, and log usage. Input schemas describe admissible argument structure; they do not confer permission. The application must check the requested action and target against the caller's authority. When an output schema is provided, server results must conform and clients should validate them. Protocol errors and isError tool results must be handled as failures rather than successful actions.

  61. gRPC lifecycle: cancellation is not rollback

    Client and server can disagree about an RPC's success: the server may finish while its response arrives after the client's deadline. gRPC explicitly warns that cancellation does not roll back changes already made. Application implication: cancellation during a mutation may leave an unknown outcome. Retain an operation identifier, query authoritative status or reconcile the resulting state, and use an idempotent retry contract before resubmitting. If an effect must be reversed, that requires a separate supported compensating operation rather than assuming cancellation undid it.

  62. MCP request progress, revision 2026-07-28

    Progress is an optional core facility. A client includes params._meta.progressToken, a string or integer unique across active requests. The server may emit notifications/progress carrying that token, an increasing numeric progress value, optional total, and optional human-readable message. Values may be fractional; total may be omitted. Notifications must refer to active, in-progress operations and stop after completion. Providing a token does not oblige the server to report progress or use a particular frequency. As a display calculation, percentage = 100 × progress / total is useful only when total is known, positive, and represents comparable units; this formula is an application inference, not a protocol field.

  63. MCP request cancellation and timeout limits

    Cancellation is an optional core facility with binding-specific signaling: stdio clients send notifications/cancelled with the outstanding requestId; HTTP clients close the request's SSE response stream. Servers should stop processing, release resources, and omit a response. A cancellation notification may be ignored when the request is unknown, already finished, or cannot be cancelled; clients should ignore late responses and handle races. Implementations should set request timeouts and cancel when they expire. Progress may reset the timeout clock, but an overall maximum timeout should still apply. Thus cancellation expresses abandonment and a stop request, not proof that execution or external effects were reversed.

  64. GitHub REST API endpoints for issue comments

    Creating an issue comment uses POST /repos/{owner}/{repo}/issues/{issue_number}/comments with a required body. The documented fine-grained permissions require Issues write or Pull requests write. Creation triggers notifications and can encounter secondary rate limiting. HTTP 201 returns a comment representation containing its ID, body, author, timestamps, and URLs. A separate paginated GET lists comments in ascending ID order.

  65. Your Agent Didn’t Fail. Your Harness Did.

    Bound external waits, record terminal outcomes, and keep recovery commands outside the blocked work queue.

  66. One Year of MCP: November 2025 Spec Release

    On November 25, 2025, the MCP Core Maintainers announced experimental Tasks for polling ongoing work and retrieving results after the initiating request. The release also introduced URL-based Client ID Metadata Documents to address registration friction between previously unrelated clients and authorization servers. URL-mode elicitation provided an out-of-band path for obtaining third-party credentials without routing those credentials through the MCP client.

  67. MCP Tasks extension: capability, lifecycle, and result retrieval

    Tasks are an optional extension, io.modelcontextprotocol/tasks, currently augmenting tools/call. Both peers declare support; clients include it in per-request capabilities. The server chooses an ordinary result or CreateTaskResult with resultType: task and taskId, and must durably create a discoverable task before returning its handle. Clients poll tasks/get, respecting pollIntervalMs. Working means execution continues; input_required exposes inputRequests answered through tasks/update. Completed includes the original method's result, even a tool result with isError; failed carries a JSON-RPC error; cancelled carries cancellation status. Optional notifications/tasks deliver equivalent full state and results through subscriptions/listen for acknowledged taskIds. Ordinary notifications/progress are unsupported for tasks. Retention uses creation time plus ttlMs; null means unlimited TTL, and TTL may change.

  68. MCP Tasks architecture: durable handles across disconnects

    The official Tasks overview describes task IDs as durable handles that survive disconnects. The server manages stored task state, while a worker performs the computation and records its final result or error. The task store remains reachable through tasks/get even if the connection or worker has died. This separates execution and result retrieval from the lifetime of the initiating connection: a client retaining the handle can reconnect and inspect stored state. A durable handle does not itself guarantee that a failed worker restarts or that computation succeeds; worker recovery is an application concern.

  69. MCP Tasks (async)/ Why the heck aren't any agents supporting MCP tasks/async?

    Map the protocol's task lifecycle onto the application's domain state machine rather than treating them as identical.

  70. SEP-2663: task cancellation, post-cancel observation, and retention

    Task cancellation uses tasks/cancel, never notifications/cancelled. Its empty acknowledgement confirms receipt, not stopped execution: cancellation is cooperative, the server decides whether and when to honor it, and another terminal outcome remains possible. Clients may stop observing and discard local state immediately, or retain taskId and inspect post-cancel status with tasks/get. Cancelled status does not promise a final result; completed supplies the result and failed supplies an error. Clients should persist task IDs for polling after restart. After createdAt + ttlMs, servers may fail and delete a task; nonexistent IDs produce Invalid params on tasks/get. Every task-related request requires authentication and authorization checks. The extension removes legacy tasks/result and tasks/list.

  71. MCP Inspector — official repository testing documentation

    Inspector documents composable test servers exercised over real HTTP transports or stdio subprocesses. Published fixture configurations cover pagination, structured results, duplicate tool names, schemas rejected by clients, authorization metadata discovery, and resource subscriptions. Its current test infrastructure distinguishes legacy and modern protocol behavior. These fixtures provide concrete categories for interface testing beyond merely establishing a connection.

  72. Are MCPs Overhyped? A Rant about MCPs

    The talk distinguishes basic MCP Inspector testing from the unresolved task of designing tools that agents discover and call effectively.

  73. Block’s Playbook for Designing MCP Servers

    Block’s June 16, 2025 engineering account describes successive designs of its Linear MCP integration. Initially, tools mirrored individual API operations. Consolidating related tools reduced the catalog but still required multiple calls for questions about an assignee’s work. A subsequent design exposed separate read and mutation GraphQL tools with schema guidance, allowing the illustrated question to become one query. The account shows that choosing MCP leaves substantial service-interface design work.

  74. A2A & MCP: Automating Business Processes with LLMs

    MCP extensibility does not guarantee efficient access patterns; Bench replaced its initial Slack and Salesforce MCP integrations with first-party integrations that included caching and indexing.

  75. MCP Resources — revision 2025-06-18

    Resources are URI-identified information supplied by servers; the host determines how their contents enter model context. resources/list discovers descriptions, resources/read retrieves content, and resources/templates/list exposes parameterized URI templates. Content can be text or base64-encoded binary with an optional MIME type. Custom URI schemes are permitted; file URIs need not represent physical files. Optional subscribe and listChanged capabilities are independent. resources/subscribe registers interest in a resource; notifications/resources/updated identifies the changed URI, while notifications/resources/list_changed concerns the inventory. The update example supplies an address rather than replacement content, so refreshing an included snapshot requires another read and host-side context handling.

  76. MCP Prompts — revision 2025-06-18

    Servers advertise prompts support during initialization. prompts/list returns available templates and their argument declarations; prompts/get supplies a name and argument values and receives messages. The published code-review example inserts supplied code into a returned user message. User-controlled means prompts are intended for explicit user selection, commonly through commands, but MCP mandates no particular interface. Servers supporting listChanged should send notifications/prompts/list_changed when available prompts change. The retrieval response supplies material for a model interaction rather than performing that interaction.

  77. Full Spec MCP: Hidden Capabilities of the MCP Spec — Harald Kirschner, Microsoft/VS Code

    Client, SDK, and documentation gaps can reinforce tools-only adoption even when the protocol offers richer interactions.

  78. Your Agent Is an Infinite Canvas

    Server-side availability does not guarantee client access or retrieval: the speaker found resources invisible in client UIs and considered repeated transcript tool calls inefficient.

  79. MCP = Mega Context Problem - Matt Carey

    Creating and loading a separate tool for every API endpoint can make the tool descriptions themselves exceed a practical context budget.

  80. Your MCP Server is Bad and You Should Feel Bad

    On-demand description tools can reduce initial catalog exposure, but dynamic discovery must account for client caching and the complexity of tools that describe or invoke other tools.

  81. AWS Builders Library: Making retries safe with idempotent APIs

    An idempotent API accepts a caller-provided operation identifier scoped to that caller. The service records the identifier, original parameters, and outcome; repeated requests return semantically equivalent results without repeating the effect. Reusing an identifier with changed parameters produces a validation error. Recording the key and performing the related mutations must satisfy atomicity, consistency, isolation, and durability, so concurrent duplicates or crashes cannot leave an effect without its deduplication record. Retention covers a specified retry window rather than forever. Logging an ID makes requests traceable but does not implement this enforcement.

  82. Remote MCPs: What we learned from shipping — John Welsh, Anthropic

    The speaker separates MCP's JSON-RPC messages from its external transport conventions and demonstrates carrying those messages over an internal WebSocket transport.

  83. Building Protected MCP Servers

    The draft authorization design described in the talk separates the MCP resource server from the authorization server.

  84. Building Protected MCP Servers

    The talk describes server-hosted resource metadata that identifies the resource and advertises authorization servers, supported bearer methods, and scopes.

  85. MCP Tasks (async)/ Why the heck aren't any agents supporting MCP tasks/async?

    Tunneling input requests through a long-running result connection creates reconnection and continuation complexity.