|
""" |
|
Adapts the FastMCP quickstart example to work with Gradio's MCP integration. |
|
""" |
|
|
|
import logging |
|
|
|
logging.basicConfig(level=logging.WARNING) |
|
|
|
|
|
console_handler = logging.StreamHandler() |
|
console_handler.setLevel(logging.DEBUG) |
|
|
|
|
|
formatter = logging.Formatter("%(name)s - %(levelname)s - %(message)s") |
|
console_handler.setFormatter(formatter) |
|
|
|
|
|
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() |
|
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 |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
app.launch(mcp_server=True, ssr_mode=False) |
|
|