Spaces:
Runtime error
Runtime error
phil71x
commited on
Commit
·
ea687f2
1
Parent(s):
f57cfd6
docs: Remove outdated documentation for MCP tools with Gradio
Browse files- docs/mcp_with_gradio.md +0 -143
docs/mcp_with_gradio.md
DELETED
@@ -1,143 +0,0 @@
|
|
1 |
-
# Creating MCP Tools with Gradio and Python
|
2 |
-
|
3 |
-
This document provides a detailed explanation of how to build a Model Context Protocol (MCP) tool server using Python and Gradio. We will use a simple sentiment analysis function as a practical example to illustrate the process of exposing Python functions as MCP tools.
|
4 |
-
|
5 |
-
## 1. Project Overview
|
6 |
-
|
7 |
-
This project demonstrates how to build a Model Context Protocol (MCP) tool server using Python and Gradio. We will use a simple sentiment analysis function as a practical example to illustrate the process of exposing Python functions as MCP tools.
|
8 |
-
|
9 |
-
The primary focus is to show how Gradio can automatically create an MCP tool from a Python function, making it accessible to MCP clients like LLM-based agents. The sentiment analysis function serves as a concrete illustration of this capability, rather than being the central subject itself.
|
10 |
-
|
11 |
-
## 2. Core Technologies
|
12 |
-
|
13 |
-
### a. Python
|
14 |
-
The project is written in Python, a versatile and widely-used programming language, particularly popular in web development, data science, and machine learning.
|
15 |
-
|
16 |
-
### b. Gradio
|
17 |
-
[Gradio](https://www.gradio.app/) is a Python library that makes it easy to create and share web-based UIs for machine learning models, Python functions, or any arbitrary Python code. Key features relevant to this project include:
|
18 |
-
* **Rapid UI Development**: Quickly build interactive demos.
|
19 |
-
* **Variety of Input/Output Components**: Supports text boxes, sliders, images, JSON, etc.
|
20 |
-
* **Automatic MCP Server Integration**: Can automatically expose Python functions as MCP tools, which is the core focus of this demonstration.
|
21 |
-
|
22 |
-
### c. Model Context Protocol (MCP)
|
23 |
-
[MCP (Model Context Protocol)](https://modelcontextprotocol.io/) is a standard designed to allow language models (LLMs) and other AI agents to interact with external tools and resources in a structured way.
|
24 |
-
Key concepts of MCP include:
|
25 |
-
* **Resources**: File-like data that can be read by clients (e.g., API responses, file contents).
|
26 |
-
* **Tools**: Functions (like our example sentiment analysis function) that can be called by an LLM or agent (with user approval) to perform actions or retrieve information.
|
27 |
-
* **Prompts**: Pre-written templates that help users accomplish specific tasks with an LLM.
|
28 |
-
|
29 |
-
#### Gradio MCP Integration
|
30 |
-
Gradio simplifies the creation of MCP servers by:
|
31 |
-
1. **Automatic Tool Conversion**: Python functions provided to a Gradio Interface are automatically converted into MCP Tools.
|
32 |
-
2. **Schema Mapping**: Input components (like `gr.Textbox`) are mapped to the tool's argument schemas. Docstrings and type hints in the Python function further refine this schema.
|
33 |
-
3. **Response Formatting**: Output components (like `gr.JSON`) determine the response format of the MCP tool.
|
34 |
-
4. **Communication Protocol**: Sets up JSON-RPC over HTTP+SSE (Server-Sent Events) for client-server communication.
|
35 |
-
5. **Dual Endpoints**: Creates both a user-facing web interface and an MCP server endpoint from the same Python function.
|
36 |
-
|
37 |
-
### d. TextBlob (for the example function)
|
38 |
-
[TextBlob](https://textblob.readthedocs.io/) is a Python library for processing textual data. In this project, we use it *solely to provide a simple example function* for sentiment analysis. Its specific NLP capabilities are secondary to its role as an illustrative function to be exposed via MCP.
|
39 |
-
|
40 |
-
## 3. Code Breakdown (`server.py`)
|
41 |
-
|
42 |
-
Let's examine the `server.py` file. The core idea is to define a Python function and then use Gradio to expose it as an MCP tool.
|
43 |
-
|
44 |
-
```python
|
45 |
-
import gradio as gr
|
46 |
-
from textblob import TextBlob # For our example function
|
47 |
-
```
|
48 |
-
* **`import gradio as gr`**: Imports the Gradio library.
|
49 |
-
* **`from textblob import TextBlob`**: Imports `TextBlob` for our example `sentiment_analysis` function.
|
50 |
-
|
51 |
-
```python
|
52 |
-
# This is the example Python function we will expose as an MCP tool.
|
53 |
-
def sentiment_analysis(text: str) -> dict:
|
54 |
-
"""
|
55 |
-
Analyze the sentiment of the given text.
|
56 |
-
(This docstring is used by Gradio for the MCP tool description)
|
57 |
-
|
58 |
-
Args:
|
59 |
-
text (str): The text to analyze (used for MCP tool input schema)
|
60 |
-
|
61 |
-
Returns:
|
62 |
-
dict: A dictionary containing polarity, subjectivity, and assessment (used for MCP tool output schema)
|
63 |
-
"""
|
64 |
-
# The internal logic of this function is an example.
|
65 |
-
# Any Python function can be exposed similarly.
|
66 |
-
blob = TextBlob(text)
|
67 |
-
sentiment = blob.sentiment
|
68 |
-
|
69 |
-
return {
|
70 |
-
"polarity": round(sentiment.polarity, 2),
|
71 |
-
"subjectivity": round(sentiment.subjectivity, 2),
|
72 |
-
"assessment": "positive"
|
73 |
-
if sentiment.polarity > 0
|
74 |
-
else "negative"
|
75 |
-
if sentiment.polarity < 0
|
76 |
-
else "neutral",
|
77 |
-
}
|
78 |
-
```
|
79 |
-
* **`def sentiment_analysis(text: str) -> dict:`**: Defines our example function.
|
80 |
-
* **`text: str` (Type Hint)**: Gradio uses this (along with the input component) to define the MCP tool's input argument type and schema.
|
81 |
-
* **`-> dict` (Return Type Hint)**: Gradio uses this (along with the output component) for the MCP tool's output schema.
|
82 |
-
* **Docstring**: Crucially, Gradio uses the docstring to generate the description for the MCP tool, its arguments (`Args`), and what it returns (`Returns`). This makes the tool understandable to MCP clients.
|
83 |
-
* The internal logic using `TextBlob` is specific to this example. The key is that *any* well-documented Python function with type hints can be similarly exposed by Gradio.
|
84 |
-
|
85 |
-
```python
|
86 |
-
# Create the Gradio interface to expose the function
|
87 |
-
demo = gr.Interface(
|
88 |
-
fn=sentiment_analysis, # The Python function to expose as an MCP tool
|
89 |
-
inputs=gr.Textbox(placeholder="Enter text to analyze..."), # Defines UI and helps MCP schema
|
90 |
-
outputs=gr.JSON(), # Defines UI output and MCP tool output type
|
91 |
-
title="MCP Tool Server Example (Sentiment Analysis)",
|
92 |
-
description="Demonstrates exposing a Python function as an MCP tool via Gradio.",
|
93 |
-
)
|
94 |
-
```
|
95 |
-
* **`demo = gr.Interface(...)`**: Creates a Gradio Interface.
|
96 |
-
* **`fn=sentiment_analysis`**: Specifies the Python function that Gradio will wrap and expose as an MCP tool.
|
97 |
-
* **`inputs=gr.Textbox(...)`**: Defines the input component for the optional web UI and helps Gradio infer the input schema for the MCP tool (expecting a string for the `text` argument).
|
98 |
-
* **`outputs=gr.JSON()`**: Defines the output component for the web UI and signals to Gradio that the MCP tool will return a JSON structure (matching the `dict` return type).
|
99 |
-
|
100 |
-
```python
|
101 |
-
# Launch the interface and the MCP server
|
102 |
-
if __name__ == "__main__":
|
103 |
-
demo.launch(mcp_server=True) # Key parameter to enable MCP
|
104 |
-
```
|
105 |
-
* **`demo.launch(mcp_server=True)`**: This launches the Gradio web UI and, most importantly for this demonstration, starts the MCP server.
|
106 |
-
* **`mcp_server=True`**: This parameter explicitly tells Gradio to expose the function (`sentiment_analysis`) defined in `gr.Interface` as an MCP tool.
|
107 |
-
|
108 |
-
## 4. Running the Server
|
109 |
-
|
110 |
-
To start the server:
|
111 |
-
1. Open your terminal or command prompt.
|
112 |
-
2. Navigate to the directory containing `server.py`.
|
113 |
-
3. Ensure you have the necessary libraries installed (`pip install gradio textblob`).
|
114 |
-
4. Run the command: `python server.py`
|
115 |
-
|
116 |
-
Upon successful execution, you will see output similar to:
|
117 |
-
```
|
118 |
-
Running on local URL: http://127.0.0.1:7860
|
119 |
-
Running on MCP server at: http://127.0.0.1:7860/gradio_api/mcp/sse
|
120 |
-
```
|
121 |
-
* **Web Interface**: An optional web UI is available at `http://127.0.0.1:7860`.
|
122 |
-
* **MCP Server Endpoint**: The MCP server, exposing the `sentiment_analysis` function as a tool, is available at `http://127.0.0.1:7860/gradio_api/mcp/sse`. MCP clients connect here.
|
123 |
-
|
124 |
-
## 5. How Gradio Exposes Functions as MCP Tools (Illustrated by the Example)
|
125 |
-
|
126 |
-
1. **Tool Creation**: When `demo.launch(mcp_server=True)` is called, Gradio inspects the Python function (in this case, `sentiment_analysis`) provided to `gr.Interface`.
|
127 |
-
2. **Schema Generation**: Gradio automatically generates the MCP tool's schema:
|
128 |
-
* The Python function's name (`sentiment_analysis`) becomes the MCP tool's name.
|
129 |
-
* The function's docstring is used for the tool's description, arguments, and return value explanations.
|
130 |
-
* Input components (e.g., `gr.Textbox`) and Python type hints (e.g., `text: str`) define the tool's input arguments and their types.
|
131 |
-
* Output components (e.g., `gr.JSON()`) and Python return type hints (e.g., `-> dict`) define the tool's output structure and type.
|
132 |
-
3. **Server Endpoint**: Gradio hosts an HTTP server that listens for MCP requests at the `/gradio_api/mcp/sse` path. Communication typically uses JSON-RPC over HTTP with Server-Sent Events (SSE).
|
133 |
-
4. **Client Interaction**: An MCP client can:
|
134 |
-
* Connect to the MCP server endpoint.
|
135 |
-
* Request a list of available tools (it would find `sentiment_analysis` with its generated schema).
|
136 |
-
* Call the tool by sending a request matching the schema (e.g., providing a string for the `text` argument).
|
137 |
-
* Receive the JSON response as defined by the tool's output schema.
|
138 |
-
|
139 |
-
## 6. Conclusion
|
140 |
-
|
141 |
-
This project primarily demonstrates the ease with which Python functions can be exposed as Model Context Protocol (MCP) tools using Gradio. The sentiment analysis function served as a straightforward example to illustrate this process.
|
142 |
-
|
143 |
-
The key takeaway is Gradio's capability to automatically handle MCP tool creation, schema generation from docstrings and type hints, and server endpoint setup. This significantly simplifies the development of MCP-compatible services, allowing developers to focus on their core Python logic while Gradio manages the MCP integration. Any Python function can be similarly exposed, making Gradio a powerful utility for extending the capabilities of LLMs and other AI agents through MCP.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|