Spaces:
Sleeping
Sleeping
| # π The Quest Begins: Unveiling the MCP Endpoint | |
| Your expedition commenced with a simple GET request to the enigmatic URL: | |
| ``` | |
| https://huggingface.co/mcp | |
| ``` | |
| The server's response was a cryptic message: | |
| ```json | |
| { | |
| "jsonrpc": "2.0", | |
| "error": { | |
| "code": -32000, | |
| "message": "Method not allowed. Use POST for stateless JSON-RPC requests." | |
| }, | |
| "id": null | |
| } | |
| ``` | |
| This indicated that the server adheres to the JSON-RPC 2.0 protocol and expects POST requests for interaction. | |
| ## π§ Deciphering the Protocol: JSON-RPC 2.0 and MCP | |
| The Model Context Protocol (MCP) standardizes interactions between clients and servers, facilitating seamless communication with AI models and tools. It employs JSON-RPC 2.0 for message formatting and supports transport mechanisms like HTTP with Server-Sent Events (SSE) and stdio for local communication. | |
| ## π Discovering Available Tools | |
| Adjusting your approach, you sent a POST request with the appropriate headers and payload: | |
| ```json | |
| { | |
| "jsonrpc": "2.0", | |
| "method": "tools/list", | |
| "params": {}, | |
| "id": 1 | |
| } | |
| ``` | |
| The server responded with a list of available tools, each accompanied by detailed descriptions and input schemas: | |
| - **space_search**: Search for Hugging Face Spaces. | |
| - **model_detail**: Retrieve detailed information about a specific model. | |
| - **paper_search**: Search for machine learning research papers. | |
| - **dataset_search**: Find datasets on Hugging Face. | |
| - **dataset_detail**: Get detailed information about a specific dataset. | |
| - **duplicate_space**: Duplicate a Hugging Face Space. | |
| ## π οΈ Crafting the Gradio Client | |
| To interact with these tools in a user-friendly manner, you can construct a Gradio interface. Here's a simplified example focusing on the `space_search` tool: | |
| ```python | |
| import gradio as gr | |
| import requests | |
| import json | |
| MCP_URL = "https://huggingface.co/mcp" | |
| HEADERS = { | |
| "Content-Type": "application/json", | |
| "Accept": "application/json, text/event-stream" | |
| } | |
| def call_mcp_tool(method, params): | |
| payload = { | |
| "jsonrpc": "2.0", | |
| "method": method, | |
| "params": params, | |
| "id": 1 | |
| } | |
| response = requests.post(MCP_URL, headers=HEADERS, data=json.dumps(payload)) | |
| try: | |
| return response.json() | |
| except Exception as e: | |
| return {"error": str(e), "raw_response": response.text} | |
| def space_search(query, limit=10, mcp=False): | |
| params = { | |
| "query": query, | |
| "limit": limit, | |
| "mcp": mcp | |
| } | |
| result = call_mcp_tool("tools/call", {"tool": "space_search", "input": params}) | |
| return result | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# MCP Gradio Client - Space Search") | |
| query = gr.Textbox(label="Query") | |
| limit = gr.Slider(1, 50, value=10, label="Limit") | |
| mcp = gr.Checkbox(label="MCP Only") | |
| output = gr.JSON() | |
| btn = gr.Button("Search") | |
| btn.click(space_search, inputs=[query, limit, mcp], outputs=output) | |
| demo.launch() | |
| ``` | |
| This interface allows users to input search queries and view results directly from the MCP server. | |
| ## π Further Exploration | |
| For a comprehensive understanding and additional examples, consider exploring the following resources: | |
| - Building an MCP Client with Gradio - https://www.gradio.app/guides/building-an-mcp-client-with-gradio | |
| - Gradio MCP Integration - Hugging Face MCP Course - https://huggingface.co/learn/mcp-course/en/unit1/gradio-mcp | |
| Use this space as MCP and create you own extensions |