summaryrefslogtreecommitdiff
path: root/scripts/persona_server.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/persona_server.py')
-rw-r--r--scripts/persona_server.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/scripts/persona_server.py b/scripts/persona_server.py
new file mode 100644
index 0000000..2706669
--- /dev/null
+++ b/scripts/persona_server.py
@@ -0,0 +1,48 @@
+"""Test MCP server that pretends to be different assistants.
+
+Usage:
+ python scripts/persona_server.py # stdio transport
+ python scripts/persona_server.py streamable-http # HTTP transport
+"""
+
+from mcp.server.fastmcp import FastMCP
+
+mcp = FastMCP("persona")
+
+_PERSONAS: dict[str, str] = {
+ "pirate": "Arr! Yer askin' a salty sea dog.",
+ "robot": "Beep boop. Processing query with logic circuits.",
+ "poet": "Hark, thy words dance like petals on the wind.",
+ "chef": "Mamma mia! Let's cook up an answer.",
+}
+
+
+@mcp.tool()
+def list_personas() -> list[str]:
+ """Return available persona names."""
+ return list(_PERSONAS.keys())
+
+
+@mcp.tool()
+def chat_as_persona(persona: str, message: str) -> str:
+ """Respond to a message in the style of the chosen persona."""
+ greeting = _PERSONAS.get(persona.lower(), "Hello.")
+ return f"[{persona}] {greeting} You said: {message}"
+
+
+@mcp.tool()
+def explain_style(persona: str) -> str:
+ """Describe how the chosen persona speaks."""
+ return _PERSONAS.get(
+ persona.lower(),
+ "This persona has no special style.",
+ )
+
+
+if __name__ == "__main__":
+ import sys
+
+ transport = sys.argv[1] if len(sys.argv) > 1 else "stdio"
+ port = int(sys.argv[2]) if len(sys.argv) > 2 else 9000
+ mcp.settings.port = port
+ mcp.run(transport=transport)