kishine commited on
Commit
61c233b
·
1 Parent(s): 2c4c1b9

Add initial application files including Gradio interface, random number generator, and Brave Search API integration. Also, create .gitignore and requirements.txt for environment management.

Browse files
Files changed (4) hide show
  1. .gitignore +3 -0
  2. README.md +4 -4
  3. app.py +83 -0
  4. requirements.txt +2 -0
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ .venv/
2
+ *.un~
3
+ .env
README.md CHANGED
@@ -1,8 +1,8 @@
1
  ---
2
- title: Kishine
3
- emoji: 🐨
4
- colorFrom: green
5
- colorTo: pink
6
  sdk: gradio
7
  sdk_version: 5.38.0
8
  app_file: app.py
 
1
  ---
2
+ title: Kurita Api Test
3
+ emoji: 🚀
4
+ colorFrom: pink
5
+ colorTo: purple
6
  sdk: gradio
7
  sdk_version: 5.38.0
8
  app_file: app.py
app.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import requests
3
+ import os
4
+ from dotenv import load_dotenv
5
+ import numpy as np
6
+
7
+ load_dotenv()
8
+
9
+ def get_random_number(min=1, max=100):
10
+ """
11
+ 指定した範囲(min以上max未満)でランダムな整数を返します。
12
+
13
+ Args:
14
+ min (int): 乱数の最小値(デフォルトは1)
15
+ max (int): 乱数の最大値(デフォルトは100、maxは含まれません)
16
+
17
+ Returns:
18
+ int: 生成されたランダムな整数
19
+ """
20
+ return np.random.randint(min, max)
21
+
22
+ def brave_search(query):
23
+ """
24
+ Brave Search APIを使ってウェブ検索を行うMCPツール関数です。
25
+
26
+ Args:
27
+ query (str): 検索クエリ
28
+
29
+ Returns:
30
+ str: 検索結果のタイトル、URL、説明文をまとめた文字列。
31
+ エラー時はエラーメッセージを返します。
32
+
33
+ MCP Tool:
34
+ name: brave_search
35
+ description: Brave Search APIを利用してウェブ検索を行い、上位5件の結果を返します。
36
+ parameters:
37
+ - name: query
38
+ type: string
39
+ description: 検索したいキーワードやフレーズ
40
+ returns: 検索結果のリストまたはエラーメッセージ
41
+ """
42
+ api_key = os.getenv("BRAVE_API_KEY")
43
+ if not api_key:
44
+ return "Brave APIキーが環境変数に設定されていません。"
45
+ url = "https://api.search.brave.com/res/v1/web/search"
46
+ headers = {
47
+ "Accept": "application/json",
48
+ "X-Subscription-Token": api_key
49
+ }
50
+ params = {
51
+ "q": query,
52
+ "count": 5
53
+ }
54
+ response = requests.get(url, headers=headers, params=params)
55
+ if response.status_code == 200:
56
+ results = response.json().get("web", {}).get("results", [])
57
+ if not results:
58
+ return "検索結果が見つかりませんでした。"
59
+ output = ""
60
+ for r in results:
61
+ output += f"【{r.get('title','No Title')}】\n{r.get('url','')}\n{r.get('description','')}\n\n"
62
+ return output
63
+ else:
64
+ return f"エラーが発生しました: {response.status_code}"
65
+
66
+ with gr.Blocks() as demo:
67
+ gr.Markdown("# My APIs")
68
+ #gr.Markdown("# マイアプリ")
69
+ with gr.Accordion("Brave検索", open=True):
70
+ query = gr.Textbox(label="検索クエリ")
71
+ output = gr.Textbox(label="検索結果", lines=10)
72
+ search_btn = gr.Button("検索", variant="primary")
73
+ search_btn.click(fn=brave_search, inputs=[query], outputs=output)
74
+
75
+ with gr.Accordion("ランダム数生成", open=True):
76
+ min_value = gr.Number(label="最小値", value=1)
77
+ max_value = gr.Number(label="最大値", value=100)
78
+ random_number = gr.Number(label="ランダム数")
79
+ generate_btn = gr.Button("生成", variant="primary")
80
+ generate_btn.click(fn=get_random_number, inputs=[min_value, max_value], outputs=random_number)
81
+
82
+ if __name__ == "__main__":
83
+ demo.launch(mcp_server=True)
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ gradio[mcp]
2
+ numpy