Spaces:
Running
Running
#!/usr/bin/env python3 | |
""" | |
A1D MCP Server with Gradio - Official MCP Implementation | |
Following Gradio's official MCP documentation | |
""" | |
import gradio as gr | |
import os | |
from utils import A1DAPIClient, prepare_request_data, format_response_with_preview | |
from config import TOOLS_CONFIG | |
def get_api_client(): | |
"""Get API client with current API key""" | |
api_key = os.getenv("A1D_API_KEY") | |
if not api_key: | |
raise ValueError("A1D_API_KEY environment variable is required") | |
return A1DAPIClient(api_key) | |
def remove_background(image_url: str) -> str: | |
""" | |
Remove background from images using AI. | |
Args: | |
image_url (str): The URL of the image to remove background from. Must be a valid HTTP/HTTPS URL pointing to an image file. | |
Returns: | |
str: A message indicating the result and the URL of the processed image. | |
""" | |
try: | |
if not image_url or not image_url.strip(): | |
return "β Error: Please provide an image URL" | |
client = get_api_client() | |
data = prepare_request_data("remove_bg", image_url=image_url) | |
response = client.make_request_with_result( | |
TOOLS_CONFIG["remove_bg"]["api_endpoint"], | |
data, | |
timeout=120 | |
) | |
message, media_url = format_response_with_preview(response, "remove_bg") | |
return f"{message}\n\nResult URL: {media_url}" if media_url else message | |
except Exception as e: | |
return f"β Error: {str(e)}" | |
def upscale_image(image_url: str, scale: str = "2") -> str: | |
""" | |
Upscale images using AI. | |
Args: | |
image_url (str): The URL of the image to upscale. Must be a valid HTTP/HTTPS URL pointing to an image file. | |
scale (str): Scale factor for upscaling. Choose from "2", "4", "8", or "16". Higher values produce larger images but take longer to process. | |
Returns: | |
str: A message indicating the result and the URL of the processed image. | |
""" | |
try: | |
if not image_url or not image_url.strip(): | |
return "β Error: Please provide an image URL" | |
client = get_api_client() | |
data = prepare_request_data("image_upscaler", image_url=image_url, scale=int(scale)) | |
response = client.make_request_with_result( | |
TOOLS_CONFIG["image_upscaler"]["api_endpoint"], | |
data, | |
timeout=120 | |
) | |
message, media_url = format_response_with_preview(response, "image_upscaler") | |
return f"{message}\n\nResult URL: {media_url}" if media_url else message | |
except Exception as e: | |
return f"β Error: {str(e)}" | |
def generate_image(prompt: str) -> str: | |
""" | |
Generate images using AI from text prompts. | |
Args: | |
prompt (str): Text description of the image to generate. Be descriptive and specific for better results. Example: "A beautiful sunset over mountains with vibrant orange and purple colors". | |
Returns: | |
str: A message indicating the result and the URL of the generated image. | |
""" | |
try: | |
if not prompt or not prompt.strip(): | |
return "β Error: Please provide a text prompt" | |
client = get_api_client() | |
data = prepare_request_data("image_generator", prompt=prompt) | |
response = client.make_request_with_result( | |
TOOLS_CONFIG["image_generator"]["api_endpoint"], | |
data, | |
timeout=120 | |
) | |
message, media_url = format_response_with_preview(response, "image_generator") | |
return f"{message}\n\nResult URL: {media_url}" if media_url else message | |
except Exception as e: | |
return f"β Error: {str(e)}" | |
def vectorize_image(image_url: str) -> str: | |
""" | |
Convert images to vector format using AI. | |
Args: | |
image_url (str): The URL of the image to convert to vector format. Must be a valid HTTP/HTTPS URL pointing to an image file. | |
Returns: | |
str: A message indicating the result and the URL of the vectorized image. | |
""" | |
try: | |
if not image_url or not image_url.strip(): | |
return "β Error: Please provide an image URL" | |
client = get_api_client() | |
data = prepare_request_data("image_vectorization", image_url=image_url) | |
response = client.make_request_with_result( | |
TOOLS_CONFIG["image_vectorization"]["api_endpoint"], | |
data, | |
timeout=120 | |
) | |
message, media_url = format_response_with_preview(response, "image_vectorization") | |
return f"{message}\n\nResult URL: {media_url}" if media_url else message | |
except Exception as e: | |
return f"β Error: {str(e)}" | |
def extend_image(image_url: str) -> str: | |
""" | |
Extend images using AI. | |
Args: | |
image_url (str): The URL of the image to extend. Must be a valid HTTP/HTTPS URL pointing to an image file. | |
Returns: | |
str: A message indicating the result and the URL of the extended image. | |
""" | |
try: | |
if not image_url or not image_url.strip(): | |
return "β Error: Please provide an image URL" | |
client = get_api_client() | |
data = prepare_request_data("image_extends", image_url=image_url) | |
response = client.make_request_with_result( | |
TOOLS_CONFIG["image_extends"]["api_endpoint"], | |
data, | |
timeout=120 | |
) | |
message, media_url = format_response_with_preview(response, "image_extends") | |
return f"{message}\n\nResult URL: {media_url}" if media_url else message | |
except Exception as e: | |
return f"β Error: {str(e)}" | |
def upscale_video(video_url: str) -> str: | |
""" | |
Upscale videos using AI. | |
Args: | |
video_url (str): The URL of the video to upscale. Must be a valid HTTP/HTTPS URL pointing to a video file (MP4, AVI, MOV, etc.). | |
Returns: | |
str: A message indicating the result and the URL of the upscaled video. | |
""" | |
try: | |
if not video_url or not video_url.strip(): | |
return "β Error: Please provide a video URL" | |
client = get_api_client() | |
data = prepare_request_data("video_upscaler", video_url=video_url) | |
response = client.make_request_with_result( | |
TOOLS_CONFIG["video_upscaler"]["api_endpoint"], | |
data, | |
timeout=300 | |
) | |
message, media_url = format_response_with_preview(response, "video_upscaler") | |
return f"{message}\n\nResult URL: {media_url}" if media_url else message | |
except Exception as e: | |
return f"β Error: {str(e)}" | |
# Create the Gradio interface using the official MCP approach | |
demo = gr.Interface( | |
fn=remove_background, | |
inputs=[gr.Textbox(label="Image URL", placeholder="https://example.com/image.jpg", value="https://asset2.qieman.com/user-avatar/20240721/1071394_e15eb706-485d-4604-ad28-ac9830de1fe4.jpg")], | |
outputs=[gr.Textbox(label="Result")], | |
title="π€ A1D MCP Server - Universal AI Tools", | |
description="Powerful AI image and video processing tools for any MCP-compatible client.", | |
examples=[ | |
["https://asset2.qieman.com/user-avatar/20240721/1071394_e15eb706-485d-4604-ad28-ac9830de1fe4.jpg"], | |
["https://images.unsplash.com/photo-1506905925346-21bda4d32df4"] | |
] | |
) | |
if __name__ == "__main__": | |
# Check for API key | |
if not os.getenv("A1D_API_KEY"): | |
print("β Error: A1D_API_KEY environment variable is required") | |
print("Please set your API key in the Space settings") | |
exit(1) | |
print("π Starting A1D MCP Server (Official Implementation)...") | |
print("β API key found") | |
print("π MCP Server will be available at: /gradio_api/mcp/sse") | |
# Launch with MCP server enabled (official method) | |
demo.launch( | |
server_name="0.0.0.0", | |
server_port=7860, | |
share=False, | |
mcp_server=True # This is the official way to enable MCP | |
) | |