freddyaboulton's picture
Update app.py
2750d46 verified
"""
Adapts the FastMCP quickstart example to work with Gradio's MCP integration.
"""
import logging
# Configure the root logger to WARNING to suppress debug messages from other libraries
logging.basicConfig(level=logging.WARNING)
# Create a console handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# Create a formatter
formatter = logging.Formatter("%(name)s - %(levelname)s - %(message)s")
console_handler.setFormatter(formatter)
# Configure the logger for your specific library
logger = logging.getLogger("mcp")
logger.setLevel(logging.DEBUG)
logger.addHandler(console_handler)
import subprocess
print(subprocess.call("pip freeze | grep 'mcp'", shell=True))
import gradio as gr
@gr.mcp.tool() # Not needed as functions are registered as tools by default
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
@gr.mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""Get a personalized greeting"""
return f"Hello, {name}!"
@gr.mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
"""Generate a greeting prompt"""
styles = {
"friendly": "Please write a warm, friendly greeting",
"formal": "Please write a formal, professional greeting",
"casual": "Please write a casual, relaxed greeting",
}
return f"{styles.get(style, styles['friendly'])} for someone named {name}."
demo = gr.TabbedInterface(
[
gr.Interface(add, [gr.Number(value=1), gr.Number(value=2)], gr.Number()),
gr.Interface(get_greeting, gr.Textbox("Abubakar"), gr.Textbox()),
gr.Interface(
greet_user,
[
gr.Textbox("Abubakar"),
gr.Dropdown(choices=["friendly", "formal", "casual"]),
],
gr.Textbox(),
),
],
[
"Add",
"Get Greeting",
"Greet User",
],
)
@gr.mcp.prompt()
def do_things(name: str) -> str:
"""Generate a prompt for doing things"""
return f"Please suggest some activities for someone named {name}."
@gr.mcp.resource("config://settings")
def get_settings() -> str:
"""Get application settings."""
return """{
"theme": "dark",
"language": "en",
"debug": false
}"""
@gr.mcp.resource("file://sample_image.png", mime_type="image/png")
def image() -> str:
"""Get application settings."""
from pathlib import Path
import base64
return base64.b64encode(
Path("/Users/freddyboulton/Pictures/Karaoke_Huggy.png").read_bytes()
).decode("utf-8")
with demo as app:
pass
# gr.api(do_things, api_name="activities")
# gr.api(get_settings, api_name="settings")
# gr.api(image, api_name="sample_image")
if __name__ == "__main__":
app.launch(mcp_server=True, ssr_mode=False)