Duck MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Duck MCP Server Ask me to choose a color from red, blue, green."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Duck MCP Server š¦
A simple MCP (Model Context Protocol) server built with FastMCP.
Features
This server provides the following tools:
select_option: Ask user to select one option from provided choices (uses elicitation)
provide_information: Request additional information from user in natural language (uses elicitation)
request_manual_test: Request the user to perform manual testing and report results (uses elicitation)
Related MCP server: mcpbin
Installation
Prerequisites
Python 3.10 or higher
uv (recommended) or pip
Install Dependencies
Using uv (recommended):
uv syncUsing pip:
pip install -e .Usage
Running the Server
Using the FastMCP CLI (recommended):
# Run with default configuration from fastmcp.json
fastmcp run
# Or specify the config file explicitly
fastmcp run fastmcp.json
# Run with HTTP transport for testing
fastmcp run --transport http --port 8000Using Python directly:
python server.pyRunning with uv:
uv run fastmcp run server.pyDevelopment Mode
Run with the FastMCP Inspector UI:
fastmcp devInspect Server Capabilities
View all available tools, resources, and prompts:
fastmcp inspectInstalling to MCP Clients
Claude Desktop
fastmcp install claude-desktopCursor
fastmcp install cursorClaude Code (VS Code Extension)
fastmcp install claude-codeTesting
You can test the server using a FastMCP client:
import asyncio
from fastmcp import Client
async def test_server():
async with Client("http://localhost:8000/mcp") as client:
# Ping the server to check connectivity
await client.ping()
print("Server is running!")
if __name__ == "__main__":
asyncio.run(test_server())Testing Elicitation Tools
The select_option, provide_information, and request_manual_test tools use FastMCP's elicitation feature to interactively request information from users:
import asyncio
from fastmcp import Client
async def elicitation_handler(message: str, response_type: type, params, context):
"""Handler that responds to server's elicitation requests"""
print(f"Server asks: {message}")
user_input = input("Your response: ")
return response_type(selected_option=user_input) if hasattr(response_type, '__annotations__') and 'selected_option' in response_type.__annotations__ else response_type(information=user_input)
async def test_elicitation():
async with Client("http://localhost:8000/mcp", elicitation_handler=elicitation_handler) as client:
# Test select_option tool
result = await client.call_tool("select_option", {
"question": "What's your favorite programming language?",
"options": ["Python", "JavaScript", "Rust", "Go"]
})
print(result.data)
# Test provide_information tool
result = await client.call_tool("provide_information", {
"question": "What would you like to build today?"
})
print(result.data)
# Test request_manual_test tool
result = await client.call_tool("request_manual_test", {
"test_description": "Navigate to the login page and verify the form renders correctly",
"expected_outcome": "Login form should display username/password fields and submit button"
})
print(result.data)
if __name__ == "__main__":
asyncio.run(test_elicitation())Project Structure
duck-mcp/
āāā server.py # Main server implementation
āāā fastmcp.json # FastMCP configuration
āāā pyproject.toml # Project metadata and dependencies
āāā README.md # This file
āāā tests/ # Test files (optional)Development
Adding New Tools
To add a new tool to the server, simply decorate a function with @mcp.tool:
@mcp.tool
def my_new_tool(arg1: str, arg2: int) -> str:
"""Description of what this tool does"""
# Your implementation here
return "result"Running Tests
pytestDeployment
Local Deployment
The server runs with stdio transport by default, making it compatible with local MCP clients like Claude Desktop.
HTTP Deployment
For remote access, run with HTTP transport:
fastmcp run --transport http --host 0.0.0.0 --port 8000FastMCP Cloud
Deploy to FastMCP Cloud for managed hosting (requires account):
fastmcp cloud deployConfiguration
The fastmcp.json file contains the server configuration:
source: Location and entrypoint of the server code
environment: Python version and dependencies
deployment: Runtime configuration (transport, logging, etc.)
You can override any configuration via CLI arguments:
fastmcp run --port 8080 --log-level DEBUGMCP Client Configuration
To use this MCP server with MCP-compatible clients (like Claude Desktop), add the following configuration to your client's mcp.json file:
Using uv (recommended):
{
"mcpServers": {
"duck-mcp": {
"command": "uv",
"args": ["run", "fastmcp", "run", "server.py"],
"cwd": "/path/to/duck-mcp"
}
}
}Using Python directly:
{
"mcpServers": {
"duck-mcp": {
"command": "python",
"args": ["server.py"],
"cwd": "/path/to/duck-mcp"
}
}
}Replace /path/to/duck-mcp with the actual path to your duck-mcp directory. The cwd (current working directory) ensures the server runs from the correct location.
Learn More
License
MIT
Available Tools
3 toolsprovide_informationC
Request additional information from user in natural language.
Inputs: question (required). Returns: result
request_manual_testC
Request the user to perform manual testing and report results.
This tool allows an agent to ask a user to perform manual testing of functionality, and then collect the results via elicitation for analysis.
Inputs: test_description (required), expected_outcome. Returns: result
select_optionB
Ask user to select one option from provided choices.
Inputs: options (required), question (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogā¦
TDQS
Scored across 3 tools
Each tool has a distinct purpose: providing information, requesting manual tests, and selecting options. There is no overlap or ambiguity between them.
All tool names follow a consistent verb_noun pattern (provide_information, request_manual_test, select_option), with clear and descriptive naming.
With 3 tools, the set is minimal but well-scoped for a server focused on user interaction requests. It is slightly thin but appropriate for its apparent purpose.
The tools cover key user elicitation tasks (info, manual test, option selection), but lack general action requests or confirmations, leaving some gaps in the interaction surface.
Maintenance
Related MCP Connectors
An MCP server that automatically collects feedback on your MCP server.
MCP server for Support & Service Management
MCP Server for an Agent Task Marketplace
Related MCP Servers
- AlicenseCqualityDmaintenanceA demonstration server that showcases how to collect user input dynamically using the Model Context Protocol (MCP) elicitation system across tools, resources, and prompts.10443,034 npmMIT
- FlicenseNot gradedqualityDmaintenanceA testing server for MCP client implementations that provides tools for echoing data, error handling, timing operations, data generation, LLM sampling, and user elicitations.-
- AlicenseNot gradedqualityDmaintenanceA demonstration MCP server that shows how to use elicitations to ask users for preferences during a video search tool execution.1ISC
- FlicenseNot gradedqualityDmaintenanceAn MCP server that provides tools to consult predefined or custom stakeholder personas for iterative product feedback and design reviews.1-