Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// @ts-nocheck

// --8<-- [start:elicitation_server]
// server.ts
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import { z } from 'zod'

const server = new McpServer({
name: 'File Tools',
version: '1.0.0',
})

server.tool(
'delete_files',
'Delete the given files after getting user approval.',
{
paths: z.array(z.string()),
},
async ({ paths }) => {
const result = await server.server.elicitInput({
message: `Do you want to delete ${paths.join(', ')}?`,
requestedSchema: {
type: 'object',
properties: {
username: { type: 'string', description: 'Who is approving?' },
},
required: ['username'],
},
})

if (result.action !== 'accept') {
return { content: [{ type: 'text', text: `User ${result.action}ed deletion` }] }
}

// Perform deletion...
const username = (result.content as { username: string }).username
return { content: [{ type: 'text', text: `User ${username} approved deletion` }] }
}
)

await server.connect(new StdioServerTransport())
// --8<-- [end:elicitation_server]

// --8<-- [start:elicitation_client]
// client.ts
import { Agent, McpClient } from '@strands-agents/sdk'
import type { ElicitationCallback } from '@strands-agents/sdk'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue: The elicitation_client snippet uses McpClient, StdioClientTransport, and Agent without importing them. Unlike mcp-tools.ts where these are imported at the file top and shared across all snippets, this is a separate file so the client snippet is missing its imports. The Python counterpart includes all necessary imports (from strands import Agent, from strands.tools.mcp import MCPClient, etc.), so readers copying the TypeScript client code won't have the full picture.

Suggestion: Add the missing imports inside the elicitation_client snippet:

// --8<-- [start:elicitation_client]
// client.ts
import { Agent, McpClient } from '@strands-agents/sdk'
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'
import type { ElicitationCallback } from '@strands-agents/sdk'
// ... rest of snippet

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed resolved — all three imports (Agent, McpClient, ElicitationCallback, StdioClientTransport) are present in the elicitation_client snippet.

import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'

const elicitationCallback: ElicitationCallback = async (_context, params) => {
console.log(`ELICITATION: ${params.message}`)
// Get user confirmation...
return {
action: 'accept',
content: { username: 'myname' },
}
}

const elicitClient = new McpClient({
transport: new StdioClientTransport({
command: 'npx',
args: ['tsx', '/path/to/server.ts'],
}),
elicitationCallback,
})

const agentElicit = new Agent({
tools: [elicitClient],
})

await agentElicit.invoke("Delete 'a/b/c.txt' and share the name of the approver")

await elicitClient.disconnect()
// --8<-- [end:elicitation_client]
16 changes: 11 additions & 5 deletions src/content/docs/user-guide/concepts/tools/mcp-tools.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -429,13 +429,13 @@ For more information on implementing MCP servers, see the [MCP documentation](ht

## Advanced Usage

<Tabs>
<Tab label="Python">

### Elicitation

An MCP server can request additional information from the user by sending an elicitation request. Set up an elicitation callback to handle these requests:

<Tabs>
<Tab label="Python">

```python
# server.py
from mcp.server import FastMCP
Expand Down Expand Up @@ -492,9 +492,15 @@ For more information on elicitation, see the [MCP specification](https://modelco
</Tab>
<Tab label="TypeScript">

```ts
// Not supported in TypeScript
```typescript
--8<-- "user-guide/concepts/tools/mcp-tools-elicitation.ts:elicitation_server"
```

```typescript
--8<-- "user-guide/concepts/tools/mcp-tools-elicitation.ts:elicitation_client"
```

For more information on elicitation, see the [MCP specification](https://modelcontextprotocol.io/specification/draft/client/elicitation).
</Tab>
</Tabs>

Expand Down
Loading