Skip to content

Commit d16873a

Browse files
committed
docs: apply linkification to chapters added on main
Same policy as the previous commit, applied to the newly added MCP Apps, Extensions, and Dependencies chapters and the new migration/elicitation sections: chapter cross-references in the Dependencies and Elicitation pages become bold-wrapped links, and SEP-2133 mentions link to the proposal PR (prose first-mention and the migration section heading).
1 parent fdafe00 commit d16873a

4 files changed

Lines changed: 9 additions & 9 deletions

File tree

docs/advanced/extensions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ An **extension** is an opt-in bundle of MCP behaviour behind one identifier.
44

55
It can contribute tools, resources, and new request methods, and it can wrap `tools/call`.
66
The server advertises it under `capabilities.extensions`, the client opts in the same way,
7-
and nothing changes for anyone who didn't ask for it. That is the contract (SEP-2133), and
7+
and nothing changes for anyone who didn't ask for it. That is the contract ([SEP-2133](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2133)), and
88
it has one golden rule: **extensions are off by default**.
99

1010
## Using an extension

docs/migration.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ On `ClientSession`, `call_tool` / `get_prompt` / `read_resource` still return th
407407

408408
For protocol 2026-07-28 over Streamable HTTP, a tool's input-schema property may carry an `x-mcp-header` annotation. When a tool the client has listed is called, each annotated argument is mirrored into an `Mcp-Param-<name>` request header (string verbatim, integer as decimal, boolean as `true`/`false`, base64-sentinel-wrapped when not header-safe; `null`/absent arguments are omitted). The argument is also left in the request body. `list_tools` caches a tool's annotations, so list a tool before calling it to enable mirroring; a tool the client never listed emits no `Mcp-Param-*` headers. Other transports ignore the annotation.
409409

410-
### Server extensions API (SEP-2133)
410+
### Server extensions API ([SEP-2133](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2133))
411411

412412
`MCPServer` now accepts opt-in extensions that bundle MCP behaviour behind a
413413
reverse-DNS identifier and advertise it under `ServerCapabilities.extensions`

docs/tutorial/dependencies.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Here is the input schema `tools/list` reports for `reserve_book`:
3535
}
3636
```
3737

38-
One property. Like the `Context` in **The Context**, a resolved parameter is a contract between you and the SDK: `stock` is not in the schema, the model is never told about it, and a client that sends a `stock` value anyway is ignored. The resolver's value is the only one your tool can receive.
38+
One property. Like the `Context` in **[The Context](context.md)**, a resolved parameter is a contract between you and the SDK: `stock` is not in the schema, the model is never told about it, and a client that sends a `stock` value anyway is ignored. The resolver's value is the only one your tool can receive.
3939

4040
That last part is the point. A parameter the model cannot supply is a parameter the model cannot get wrong.
4141

@@ -84,16 +84,16 @@ A resolver's parameters resolve exactly like a tool's: another `Resolve(...)`, t
8484
!!! warning
8585
On HTTP transports the `Context` includes `ctx.headers`. Headers are **client-supplied input**,
8686
like any tool argument: fine for a locale or a feature flag, never an identity. Who the caller
87-
is comes from your authorization layer (**Authorization**), not from a header anyone can set.
87+
is comes from your authorization layer (**[Authorization](../advanced/authorization.md)**), not from a header anyone can set.
8888

8989
!!! tip
9090
*Once per call* means exactly that: the next `tools/call` runs `check_stock` again. A resource
91-
that should outlive a request - a database pool, an HTTP client - belongs in **Lifespan**, and
91+
that should outlive a request - a database pool, an HTTP client - belongs in **[Lifespan](lifespan.md)**, and
9292
a resolver can reach it through `ctx.request_context.lifespan_context`.
9393

9494
## Ask when you must
9595

96-
A resolver doesn't have to know the answer. It can return `Elicit(message, Model)` and the SDK asks the user - the **Elicitation** machinery, run for you:
96+
A resolver doesn't have to know the answer. It can return `Elicit(message, Model)` and the SDK asks the user - the **[Elicitation](elicitation.md)** machinery, run for you:
9797

9898
```python title="server.py" hl_lines="26-32 39"
9999
--8<-- "docs_src/dependencies/tutorial003.py"
@@ -114,7 +114,7 @@ And if the user won't answer at all - declines the question, or cancels it?
114114
Error executing tool order_book: Resolver for parameter 'backorder' could not resolve: elicitation was decline
115115
```
116116

117-
That's the right default for a precondition: no answer, no order. When declining is an outcome your tool wants to handle - skip the backorder but still suggest another title - annotate `ElicitationResult[Backorder]` instead and the tool receives the full accept/decline/cancel outcome to branch on. **Elicitation** shows that form, and everything else about asking: the schema rules, the three answers, the client's side of the conversation.
117+
That's the right default for a precondition: no answer, no order. When declining is an outcome your tool wants to handle - skip the backorder but still suggest another title - annotate `ElicitationResult[Backorder]` instead and the tool receives the full accept/decline/cancel outcome to branch on. **[Elicitation](elicitation.md)** shows that form, and everything else about asking: the schema rules, the three answers, the client's side of the conversation.
118118

119119
## Recap
120120

@@ -124,4 +124,4 @@ That's the right default for a precondition: no answer, no order. When declining
124124
* Bad graphs fail at registration with `InvalidSignature`, not mid-call.
125125
* Return `Elicit(message, Model)` to ask the user, only when you have to. Unwrapped annotations abort on decline; `ElicitationResult[T]` lets the tool branch.
126126

127-
Next: what happens when your tool fails, and how to choose who finds out, in **Handling errors**.
127+
Next: what happens when your tool fails, and how to choose who finds out, in **[Handling errors](handling-errors.md)**.

docs/tutorial/elicitation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ A parameter annotated `Annotated[T, Resolve(fn)]` is filled by running `fn` befo
9595

9696
Annotate the unwrapped model (`Annotated[Confirm, Resolve(confirm_delete)]`) instead when the tool doesn't need to branch: it receives the model on accept and the call aborts with an error on decline or cancel.
9797

98-
Asking is only one thing a resolver can do. The general mechanism - dependencies that compute without asking, dependencies of dependencies, what the model can and cannot supply - is the **Dependencies** chapter.
98+
Asking is only one thing a resolver can do. The general mechanism - dependencies that compute without asking, dependencies of dependencies, what the model can and cannot supply - is the **[Dependencies](dependencies.md)** chapter.
9999

100100
## Send the user to a URL
101101

0 commit comments

Comments
 (0)