Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import requests | |
| import os | |
| from dotenv import load_dotenv | |
| import numpy as np | |
| load_dotenv() | |
| def get_random_number(min=1, max=100): | |
| """ | |
| 指定した範囲(min以上max未満)でランダムな整数を返します。 | |
| Args: | |
| min (int): 乱数の最小値(デフォルトは1) | |
| max (int): 乱数の最大値(デフォルトは100、maxは含まれません) | |
| Returns: | |
| int: 生成されたランダムな整数 | |
| """ | |
| return np.random.randint(min, max) | |
| def brave_search(query): | |
| """ | |
| Brave Search APIを使ってウェブ検索を行うMCPツール関数です。 | |
| Args: | |
| query (str): 検索クエリ | |
| Returns: | |
| str: 検索結果のタイトル、URL、説明文をまとめた文字列。 | |
| エラー時はエラーメッセージを返します。 | |
| MCP Tool: | |
| name: brave_search | |
| description: Brave Search APIを利用してウェブ検索を行い、上位5件の結果を返します。 | |
| parameters: | |
| - name: query | |
| type: string | |
| description: 検索したいキーワードやフレーズ | |
| returns: 検索結果のリストまたはエラーメッセージ | |
| """ | |
| api_key = os.getenv("BRAVE_API_KEY") | |
| if not api_key: | |
| return "Brave APIキーが環境変数に設定されていません。" | |
| url = "https://api.search.brave.com/res/v1/web/search" | |
| headers = { | |
| "Accept": "application/json", | |
| "X-Subscription-Token": api_key | |
| } | |
| params = { | |
| "q": query, | |
| "count": 5 | |
| } | |
| response = requests.get(url, headers=headers, params=params) | |
| if response.status_code == 200: | |
| results = response.json().get("web", {}).get("results", []) | |
| if not results: | |
| return "検索結果が見つかりませんでした。" | |
| output = "" | |
| for r in results: | |
| output += f"【{r.get('title','No Title')}】\n{r.get('url','')}\n{r.get('description','')}\n\n" | |
| return output | |
| else: | |
| return f"エラーが発生しました: {response.status_code}" | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# My APIs") | |
| with gr.Accordion("Brave検索", open=True): | |
| query = gr.Textbox(label="検索クエリ") | |
| output = gr.Textbox(label="検索結果", lines=10) | |
| search_btn = gr.Button("検索", variant="primary") | |
| search_btn.click(fn=brave_search, inputs=[query], outputs=output) | |
| with gr.Accordion("ランダム数生成", open=True): | |
| min_value = gr.Number(label="最小値", value=1) | |
| max_value = gr.Number(label="最大値", value=100) | |
| random_number = gr.Number(label="ランダム数") | |
| generate_btn = gr.Button("生成", variant="primary") | |
| generate_btn.click(fn=get_random_number, inputs=[min_value, max_value], outputs=random_number) | |
| if __name__ == "__main__": | |
| demo.launch(mcp_server=True) | |