tooluniverse 1.0.4__py3-none-any.whl → 1.0.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of tooluniverse might be problematic. Click here for more details.
- tooluniverse/__init__.py +56 -5
- tooluniverse/agentic_tool.py +90 -14
- tooluniverse/arxiv_tool.py +113 -0
- tooluniverse/biorxiv_tool.py +97 -0
- tooluniverse/core_tool.py +153 -0
- tooluniverse/crossref_tool.py +73 -0
- tooluniverse/data/agentic_tools.json +2 -2
- tooluniverse/data/arxiv_tools.json +87 -0
- tooluniverse/data/biorxiv_tools.json +70 -0
- tooluniverse/data/core_tools.json +105 -0
- tooluniverse/data/crossref_tools.json +70 -0
- tooluniverse/data/dblp_tools.json +73 -0
- tooluniverse/data/doaj_tools.json +94 -0
- tooluniverse/data/fatcat_tools.json +72 -0
- tooluniverse/data/hal_tools.json +70 -0
- tooluniverse/data/medrxiv_tools.json +70 -0
- tooluniverse/data/odphp_tools.json +354 -0
- tooluniverse/data/openaire_tools.json +85 -0
- tooluniverse/data/osf_preprints_tools.json +77 -0
- tooluniverse/data/pmc_tools.json +109 -0
- tooluniverse/data/pubmed_tools.json +65 -0
- tooluniverse/data/unpaywall_tools.json +86 -0
- tooluniverse/data/wikidata_sparql_tools.json +42 -0
- tooluniverse/data/zenodo_tools.json +82 -0
- tooluniverse/dblp_tool.py +62 -0
- tooluniverse/default_config.py +18 -0
- tooluniverse/doaj_tool.py +124 -0
- tooluniverse/execute_function.py +70 -9
- tooluniverse/fatcat_tool.py +66 -0
- tooluniverse/hal_tool.py +77 -0
- tooluniverse/llm_clients.py +487 -0
- tooluniverse/mcp_tool_registry.py +3 -3
- tooluniverse/medrxiv_tool.py +97 -0
- tooluniverse/odphp_tool.py +226 -0
- tooluniverse/openaire_tool.py +145 -0
- tooluniverse/osf_preprints_tool.py +67 -0
- tooluniverse/pmc_tool.py +181 -0
- tooluniverse/pubmed_tool.py +110 -0
- tooluniverse/remote/boltz/boltz_mcp_server.py +2 -2
- tooluniverse/remote/uspto_downloader/uspto_downloader_mcp_server.py +2 -2
- tooluniverse/smcp.py +313 -191
- tooluniverse/smcp_server.py +4 -7
- tooluniverse/test/test_claude_sdk.py +93 -0
- tooluniverse/test/test_odphp_tool.py +166 -0
- tooluniverse/test/test_openrouter_client.py +288 -0
- tooluniverse/test/test_stdio_hooks.py +1 -1
- tooluniverse/test/test_tool_finder.py +1 -1
- tooluniverse/unpaywall_tool.py +63 -0
- tooluniverse/wikidata_sparql_tool.py +61 -0
- tooluniverse/zenodo_tool.py +74 -0
- {tooluniverse-1.0.4.dist-info → tooluniverse-1.0.6.dist-info}/METADATA +101 -74
- {tooluniverse-1.0.4.dist-info → tooluniverse-1.0.6.dist-info}/RECORD +56 -19
- {tooluniverse-1.0.4.dist-info → tooluniverse-1.0.6.dist-info}/entry_points.txt +1 -0
- tooluniverse-1.0.6.dist-info/licenses/LICENSE +201 -0
- tooluniverse-1.0.4.dist-info/licenses/LICENSE +0 -21
- {tooluniverse-1.0.4.dist-info → tooluniverse-1.0.6.dist-info}/WHEEL +0 -0
- {tooluniverse-1.0.4.dist-info → tooluniverse-1.0.6.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
from .base_tool import BaseTool
|
|
3
|
+
from .tool_registry import register_tool
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@register_tool("WikidataSPARQLTool")
|
|
7
|
+
class WikidataSPARQLTool(BaseTool):
|
|
8
|
+
"""
|
|
9
|
+
Run SPARQL queries against Wikidata (powering Scholia views).
|
|
10
|
+
|
|
11
|
+
Parameters (arguments):
|
|
12
|
+
sparql (str): SPARQL query string
|
|
13
|
+
max_results (int): Optional result limit override
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, tool_config):
|
|
17
|
+
super().__init__(tool_config)
|
|
18
|
+
self.endpoint = "https://query.wikidata.org/sparql"
|
|
19
|
+
|
|
20
|
+
def run(self, arguments=None):
|
|
21
|
+
arguments = arguments or {}
|
|
22
|
+
sparql = arguments.get("sparql")
|
|
23
|
+
max_results = arguments.get("max_results")
|
|
24
|
+
if not sparql:
|
|
25
|
+
return {"error": "`sparql` parameter is required."}
|
|
26
|
+
if max_results:
|
|
27
|
+
# naive limit appending if not present
|
|
28
|
+
if "limit" not in sparql.lower():
|
|
29
|
+
sparql = f"{sparql}\nLIMIT {int(max_results)}"
|
|
30
|
+
|
|
31
|
+
headers = {
|
|
32
|
+
"Accept": "application/sparql-results+json",
|
|
33
|
+
"User-Agent": "ToolUniverse/1.0 (https://github.com)"
|
|
34
|
+
}
|
|
35
|
+
try:
|
|
36
|
+
resp = requests.get(
|
|
37
|
+
self.endpoint,
|
|
38
|
+
params={"query": sparql, "format": "json"},
|
|
39
|
+
headers=headers,
|
|
40
|
+
timeout=30,
|
|
41
|
+
)
|
|
42
|
+
resp.raise_for_status()
|
|
43
|
+
data = resp.json()
|
|
44
|
+
except requests.RequestException as e:
|
|
45
|
+
return {
|
|
46
|
+
"error": "Network/API error calling Wikidata SPARQL",
|
|
47
|
+
"reason": str(e),
|
|
48
|
+
}
|
|
49
|
+
except ValueError:
|
|
50
|
+
return {"error": "Failed to decode SPARQL response as JSON"}
|
|
51
|
+
|
|
52
|
+
bindings = data.get("results", {}).get("bindings", [])
|
|
53
|
+
# Normalize by unwrapping "value" fields
|
|
54
|
+
normalized = []
|
|
55
|
+
for b in bindings:
|
|
56
|
+
row = {}
|
|
57
|
+
for k, v in b.items():
|
|
58
|
+
row[k] = v.get("value")
|
|
59
|
+
normalized.append(row)
|
|
60
|
+
return normalized
|
|
61
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
from .base_tool import BaseTool
|
|
3
|
+
from .tool_registry import register_tool
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@register_tool("ZenodoTool")
|
|
7
|
+
class ZenodoTool(BaseTool):
|
|
8
|
+
"""
|
|
9
|
+
Search Zenodo records with optional community filter.
|
|
10
|
+
|
|
11
|
+
Parameters (arguments):
|
|
12
|
+
query (str): Free text query
|
|
13
|
+
max_results (int): Max results (default 10, max 200)
|
|
14
|
+
community (str): Optional community slug to filter
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
def __init__(self, tool_config):
|
|
18
|
+
super().__init__(tool_config)
|
|
19
|
+
self.base_url = "https://zenodo.org/api/records"
|
|
20
|
+
|
|
21
|
+
def run(self, arguments=None):
|
|
22
|
+
arguments = arguments or {}
|
|
23
|
+
query = arguments.get("query")
|
|
24
|
+
max_results = int(arguments.get("max_results", 10))
|
|
25
|
+
community = arguments.get("community")
|
|
26
|
+
|
|
27
|
+
if not query:
|
|
28
|
+
return {"error": "`query` parameter is required."}
|
|
29
|
+
|
|
30
|
+
params = {
|
|
31
|
+
"q": query,
|
|
32
|
+
"size": max(1, min(max_results, 200)),
|
|
33
|
+
"all_versions": 1,
|
|
34
|
+
}
|
|
35
|
+
if community:
|
|
36
|
+
params["communities"] = community
|
|
37
|
+
|
|
38
|
+
try:
|
|
39
|
+
resp = requests.get(self.base_url, params=params, timeout=20)
|
|
40
|
+
resp.raise_for_status()
|
|
41
|
+
data = resp.json()
|
|
42
|
+
except requests.RequestException as e:
|
|
43
|
+
return {
|
|
44
|
+
"error": "Network/API error calling Zenodo",
|
|
45
|
+
"reason": str(e),
|
|
46
|
+
}
|
|
47
|
+
except ValueError:
|
|
48
|
+
return {"error": "Failed to decode Zenodo response as JSON"}
|
|
49
|
+
|
|
50
|
+
hits = data.get("hits", {}).get("hits", [])
|
|
51
|
+
results = []
|
|
52
|
+
for h in hits:
|
|
53
|
+
md = h.get("metadata", {})
|
|
54
|
+
title = md.get("title")
|
|
55
|
+
creators = [
|
|
56
|
+
c.get("name") for c in md.get("creators", []) if c.get("name")
|
|
57
|
+
]
|
|
58
|
+
publication_date = md.get("publication_date")
|
|
59
|
+
doi = md.get("doi") or h.get("doi")
|
|
60
|
+
url = h.get("links", {}).get("html")
|
|
61
|
+
files = h.get("files", []) or h.get("links", {}).get("latest")
|
|
62
|
+
results.append(
|
|
63
|
+
{
|
|
64
|
+
"title": title,
|
|
65
|
+
"authors": creators,
|
|
66
|
+
"date": publication_date,
|
|
67
|
+
"doi": doi,
|
|
68
|
+
"url": url,
|
|
69
|
+
"files": files,
|
|
70
|
+
"source": "Zenodo",
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
return results
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tooluniverse
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.6
|
|
4
4
|
Summary: A comprehensive collection of scientific tools for Agentic AI, offering integration with the ToolUniverse SDK and MCP Server to support advanced scientific workflows.
|
|
5
5
|
Author-email: Shanghua Gao <shanghuagao@gmail.com>
|
|
6
|
-
Project-URL: Homepage, https://github.com/mims-harvard/
|
|
6
|
+
Project-URL: Homepage, https://github.com/mims-harvard/ToolUniverse
|
|
7
7
|
Requires-Python: >=3.10
|
|
8
8
|
Description-Content-Type: text/markdown
|
|
9
9
|
License-File: LICENSE
|
|
@@ -38,19 +38,29 @@ Requires-Dist: aiohttp
|
|
|
38
38
|
Provides-Extra: dev
|
|
39
39
|
Requires-Dist: pytest>=6.0; extra == "dev"
|
|
40
40
|
Requires-Dist: pytest-cov>=2.0; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-timeout>=2.3.1; extra == "dev"
|
|
42
|
+
Requires-Dist: pytest-mock>=3.14.0; extra == "dev"
|
|
43
|
+
Requires-Dist: requests-mock>=1.12.1; extra == "dev"
|
|
41
44
|
Requires-Dist: black>=22.0; extra == "dev"
|
|
42
45
|
Requires-Dist: flake8>=4.0; extra == "dev"
|
|
43
46
|
Requires-Dist: pre-commit>=2.0; extra == "dev"
|
|
44
47
|
Provides-Extra: docs
|
|
45
48
|
Requires-Dist: sphinx>=4.0; extra == "docs"
|
|
49
|
+
Requires-Dist: furo>=2024.8.6; extra == "docs"
|
|
50
|
+
Requires-Dist: pydata-sphinx-theme>=0.15.0; extra == "docs"
|
|
46
51
|
Requires-Dist: sphinx-rtd-theme>=1.0; extra == "docs"
|
|
47
52
|
Requires-Dist: myst-parser>=0.18; extra == "docs"
|
|
53
|
+
Requires-Dist: linkify-it-py>=2.0.0; extra == "docs"
|
|
48
54
|
Requires-Dist: sphinx-autobuild>=2021.3.14; extra == "docs"
|
|
49
55
|
Requires-Dist: sphinx-copybutton>=0.5.0; extra == "docs"
|
|
50
56
|
Requires-Dist: sphinx-tabs>=3.2.0; extra == "docs"
|
|
51
57
|
Requires-Dist: sphinx-design>=0.3.0; extra == "docs"
|
|
52
58
|
Requires-Dist: sphinx-notfound-page>=0.8; extra == "docs"
|
|
53
59
|
Requires-Dist: sphinx-autodoc-typehints>=1.12.0; extra == "docs"
|
|
60
|
+
Provides-Extra: embedding
|
|
61
|
+
Requires-Dist: sentence-transformers>=5.1.0; extra == "embedding"
|
|
62
|
+
Requires-Dist: faiss-cpu>=1.12.0; extra == "embedding"
|
|
63
|
+
Requires-Dist: huggingface_hub>=0.34.0; extra == "embedding"
|
|
54
64
|
Provides-Extra: graph
|
|
55
65
|
Requires-Dist: flask>=2.0.0; extra == "graph"
|
|
56
66
|
Requires-Dist: matplotlib>=3.5.0; extra == "graph"
|
|
@@ -66,11 +76,12 @@ Dynamic: license-file
|
|
|
66
76
|
|
|
67
77
|
# <img src="docs/_static/logo.png" alt="ToolUniverse Logo" height="28" style="vertical-align: middle; margin-right: 8px;" /> ToolUniverse: Democratizing AI scientists
|
|
68
78
|
|
|
79
|
+
[](https://arxiv.org/abs/2509.23426)
|
|
69
80
|
[](https://pypi.org/project/tooluniverse/)
|
|
70
81
|
[](https://github.com/mims-harvard/ToolUniverse)
|
|
71
82
|
[_Supported-green)](README_USAGE.md#running-the-mcp-server)
|
|
72
|
-
[](https://zitniklab.hms.harvard.edu/
|
|
73
|
-
[](https://zitniklab.hms.harvard.edu/ToolUniverse/)
|
|
84
|
+
[](https://aiscientist.tools)
|
|
74
85
|
[](https://join.slack.com/t/tooluniversehq/shared_invite/zt-3dic3eoio-5xxoJch7TLNibNQn5_AREQ)
|
|
75
86
|
|
|
76
87
|
|
|
@@ -84,27 +95,34 @@ ToolUniverse is an ecosystem for creating AI scientist systems from any open or
|
|
|
84
95
|
[](https://aiscientist.tools)
|
|
85
96
|
|
|
86
97
|
[](https://join.slack.com/t/tooluniversehq/shared_invite/zt-3dic3eoio-5xxoJch7TLNibNQn5_AREQ)
|
|
87
|
-
[](https://
|
|
98
|
+
[](https://aiscientist.tools/wechat)
|
|
88
99
|
|
|
89
100
|
[](https://www.linkedin.com/in/tooluniverse-at-harvard-b9aa88385/)
|
|
90
101
|
[](https://x.com/ScientistTools)
|
|
91
102
|
|
|
92
103
|
</div>
|
|
104
|
+
<p align="center">
|
|
105
|
+
<img src="https://github.com/user-attachments/assets/13ddb54c-4fcc-4507-8695-1c58e7bc1e68" width="600" />
|
|
106
|
+
</p>
|
|
93
107
|
|
|
94
|
-
→ **Complete Tool List**: [Available Tools](https://zitniklab.hms.harvard.edu/
|
|
108
|
+
→ **Complete Tool List**: [Available Tools](https://zitniklab.hms.harvard.edu/ToolUniverse/tools/tools_config_index.html)
|
|
95
109
|
|
|
96
110
|
→ **Check our website for direct tool usage**: [AIScientist.Tools](https://aiscientist.tools/)
|
|
97
111
|
|
|
98
112
|
|
|
99
113
|
## 🤖 Building AI Scientists with ToolUniverse in 5 minutes
|
|
100
|
-
- **[Overview](https://zitniklab.hms.harvard.edu/bioagent/guide/building_ai_scientists/index.html)**: Create AI scientists from any LLM
|
|
101
|
-
- **[Claude Desktop Integration](https://zitniklab.hms.harvard.edu/bioagent/guide/building_ai_scientists/claude_desktop.html)**: Native MCP integration with Claude Desktop App
|
|
102
|
-
- **[Claude Code Integration](https://zitniklab.hms.harvard.edu/bioagent/guide/building_ai_scientists/claude_code.html)**: AI scientist development in Claude Code environment
|
|
103
|
-
- **[Gemini CLI Integration](https://zitniklab.hms.harvard.edu/bioagent/guide/building_ai_scientists/gemini_cli.html)**: Command-line scientific research with Google Gemini
|
|
104
|
-
- **[Qwen Code Integration](https://zitniklab.hms.harvard.edu/bioagent/guide/building_ai_scientists/qwen_code.html)**: AI scientist workflows in Qwen Code environment
|
|
105
|
-
- **[GPT Codex CLI Integration](https://zitniklab.hms.harvard.edu/bioagent/guide/building_ai_scientists/codex_cli.html)**: Terminal-based research with OpenAI Codex
|
|
106
|
-
- **[ChatGPT API Integration](https://zitniklab.hms.harvard.edu/bioagent/guide/building_ai_scientists/chatgpt_api.html)**: Programmatic research with ChatGPT function calling
|
|
107
114
|
|
|
115
|
+
[](https://www.youtube.com/watch?v=fManSJlSs60)
|
|
116
|
+
*Click the image above to watch the ToolUniverse demonstration*
|
|
117
|
+
[(Also in Bilibili)](https://www.bilibili.com/video/BV1GynhzjEos/?share_source=copy_web&vd_source=b398f13447281e748f5c41057a2c6858)
|
|
118
|
+
|
|
119
|
+
- **[Overview](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/building_ai_scientists/index.html)**: Create AI scientists from any LLM
|
|
120
|
+
- **[Claude Desktop Integration](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/building_ai_scientists/claude_desktop.html)**: Native MCP integration with Claude Desktop App
|
|
121
|
+
- **[Claude Code Integration](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/building_ai_scientists/claude_code.html)**: AI scientist development in Claude Code environment
|
|
122
|
+
- **[Gemini CLI Integration](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/building_ai_scientists/gemini_cli.html)**: Command-line scientific research with Google Gemini
|
|
123
|
+
- **[Qwen Code Integration](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/building_ai_scientists/qwen_code.html)**: AI scientist workflows in Qwen Code environment
|
|
124
|
+
- **[GPT Codex CLI Integration](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/building_ai_scientists/codex_cli.html)**: Terminal-based research with OpenAI Codex
|
|
125
|
+
- **[ChatGPT API Integration](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/building_ai_scientists/chatgpt_api.html)**: Programmatic research with ChatGPT function calling
|
|
108
126
|
|
|
109
127
|
## 🔬 What is ToolUniverse?
|
|
110
128
|
|
|
@@ -114,18 +132,19 @@ ToolUniverse addresses this challenge by providing a standardized ecosystem that
|
|
|
114
132
|
|
|
115
133
|
**Key Features:**
|
|
116
134
|
|
|
117
|
-
- [**AI-Tool Interaction Protocol**](https://zitniklab.hms.harvard.edu/
|
|
118
|
-
- [**Universal AI Model Support**](https://zitniklab.hms.harvard.edu/
|
|
119
|
-
- [**
|
|
120
|
-
- [**
|
|
121
|
-
- [**
|
|
122
|
-
- [**
|
|
123
|
-
|
|
135
|
+
- [**AI-Tool Interaction Protocol**](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/interaction_protocol.html): Standardized interface governing how AI scientists issue tool requests and receive results
|
|
136
|
+
- [**Universal AI Model Support**](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/building_ai_scientists/index.html): Works with any LLM, AI agent, or large reasoning model (GPT5, Claude, Gemini, Qwen, Deepseek, open models)
|
|
137
|
+
- [**OpenRouter Integration**](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/openrouter_support.html): Access 100+ models from OpenAI, Anthropic, Google, Qwen, and more through a single API
|
|
138
|
+
- [**Easy to Load & Find & Call Tool**](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/index.html) (*[WebService](https://aiscientist.tools/), [PythonAPI](https://zitniklab.hms.harvard.edu/ToolUniverse/api/modules.html), [MCP](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/mcp_support.html)*): Maps natural-language descriptions to tool specifications and executes tools with structured results
|
|
139
|
+
- [**Tool Composition & Scientific Workflows**](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/tool_composition.html): Chains tools for sequential or parallel execution in self-directed scientific workflows
|
|
140
|
+
- [**Continuous Expansion**](https://zitniklab.hms.harvard.edu/ToolUniverse/expand_tooluniverse/index.html): New tools can be easily registered locally or remotely without additional configuration
|
|
141
|
+
- [**Multi-Agent Tool Creation & Optimization**](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/scientific_workflows.html): Multi-agent powered tool construction and iterative tool optimization
|
|
124
142
|
|
|
143
|
+
<p align="center">
|
|
144
|
+
<img src="https://github.com/user-attachments/assets/eb15bd7c-4e73-464b-8d65-733877c96a51" width="888" />
|
|
145
|
+
</p>
|
|
125
146
|
|
|
126
147
|
|
|
127
|
-
<!--  -->
|
|
128
|
-
|
|
129
148
|
## 🚀 Quick Start
|
|
130
149
|
|
|
131
150
|
```python
|
|
@@ -143,17 +162,17 @@ tu.load_tools() # Load 600+ scientific tools
|
|
|
143
162
|
# 3. Use Find Tool operation to discover relevant tools
|
|
144
163
|
tools = tu.run({
|
|
145
164
|
"name": "Tool_Finder_Keyword",
|
|
146
|
-
"arguments": {"
|
|
165
|
+
"arguments": {"description": "disease target associations", "limit": 10}
|
|
147
166
|
})
|
|
148
167
|
|
|
149
168
|
# 4. Use Call Tool operation to execute selected tool
|
|
150
169
|
result = tu.run({
|
|
151
170
|
"name": "OpenTargets_get_associated_targets_by_disease_efoId",
|
|
152
|
-
"arguments": {"efoId": "
|
|
171
|
+
"arguments": {"efoId": "EFO_0000537"} # hypertension
|
|
153
172
|
})
|
|
154
173
|
```
|
|
155
174
|
|
|
156
|
-
→ **Complete Quick Start Tutorial**: [Quick Start Tutorial](https://zitniklab.hms.harvard.edu/
|
|
175
|
+
→ **Complete Quick Start Tutorial**: [Quick Start Tutorial](https://zitniklab.hms.harvard.edu/ToolUniverse/quickstart.html) [Getting Started Tutorial](https://zitniklab.hms.harvard.edu/ToolUniverse/getting_started.html)
|
|
157
176
|
|
|
158
177
|
|
|
159
178
|
## 📦 Installation
|
|
@@ -164,7 +183,7 @@ result = tu.run({
|
|
|
164
183
|
uv pip install tooluniverse
|
|
165
184
|
```
|
|
166
185
|
|
|
167
|
-
→ **Complete Installation Tutorial**: [Installation Tutorial](https://zitniklab.hms.harvard.edu/
|
|
186
|
+
→ **Complete Installation Tutorial**: [Installation Tutorial](https://zitniklab.hms.harvard.edu/ToolUniverse/installation.html)
|
|
168
187
|
|
|
169
188
|
## 🔧 Usage & Integration
|
|
170
189
|
|
|
@@ -182,17 +201,18 @@ tu.load_tools()
|
|
|
182
201
|
# Find relevant tools
|
|
183
202
|
tools = tu.run({
|
|
184
203
|
"name": "Tool_Finder_Keyword", # Tool_Finder (Embedding model, GPU required), Tool_Finder_LLM (LLM-based model)
|
|
185
|
-
"arguments": {"
|
|
204
|
+
"arguments": {"description": "protein structure prediction", "limit": 10}
|
|
186
205
|
})
|
|
187
206
|
|
|
188
207
|
# Execute tools
|
|
189
208
|
result = tu.run({
|
|
190
|
-
"name": "
|
|
191
|
-
"arguments": {"
|
|
209
|
+
"name": "UniProt_get_function_by_accession",
|
|
210
|
+
"arguments": {"accession": "P05067"}
|
|
192
211
|
})
|
|
212
|
+
|
|
193
213
|
```
|
|
194
214
|
|
|
195
|
-
→ **Complete Tutorials**: [Installation Tutorial](https://zitniklab.hms.harvard.edu/
|
|
215
|
+
→ **Complete Tutorials**: [Installation Tutorial](https://zitniklab.hms.harvard.edu/ToolUniverse/installation.html)
|
|
196
216
|
|
|
197
217
|
### MCP Support
|
|
198
218
|
|
|
@@ -200,7 +220,7 @@ result = tu.run({
|
|
|
200
220
|
# run one command to launch the tooluniverse mcp server
|
|
201
221
|
tooluniverse-smcp
|
|
202
222
|
```
|
|
203
|
-
→ **Complete Tutorial**: [MCP Support](https://zitniklab.hms.harvard.edu/
|
|
223
|
+
→ **Complete Tutorial**: [MCP Support](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/mcp_support.html)
|
|
204
224
|
|
|
205
225
|
|
|
206
226
|
## 🚀 AI Scientists Projects Powered by ToolUniverse
|
|
@@ -213,9 +233,11 @@ tooluniverse-smcp
|
|
|
213
233
|
|
|
214
234
|
|
|
215
235
|
---
|
|
216
|
-
**Hypercholesterolemia Drug Discovery** [[Tutorial]](https://zitniklab.hms.harvard.edu/
|
|
236
|
+
**Hypercholesterolemia Drug Discovery** [[Tutorial]](https://zitniklab.hms.harvard.edu/ToolUniverse/tutorials/tooluniverse_case_study.html) [[Code]](https://colab.research.google.com/drive/1UwJ6RwyUoqI5risKQ365EeFdDQWOeOCv?usp=sharing)
|
|
237
|
+
<p align="center">
|
|
238
|
+
<img src="https://github.com/user-attachments/assets/cc53e9b0-94d3-407d-a015-71762ddb9836" width="600" />
|
|
239
|
+
</p>
|
|
217
240
|
|
|
218
|
-
---
|
|
219
241
|
|
|
220
242
|
|
|
221
243
|
## 🤝 Contribution and Community
|
|
@@ -228,7 +250,7 @@ Please join our [Slack Channel](https://join.slack.com/t/tooluniversehq/shared_i
|
|
|
228
250
|
- **Report Issues**: [GitHub Issues](https://github.com/mims-harvard/ToolUniverse/issues)
|
|
229
251
|
- **Join Discussions**: [Slack Channel](https://github.com/mims-harvard/ToolUniverse/discussions)
|
|
230
252
|
- **Contact**: Reach out to [Shanghua Gao](shanghuagao@gmail.com)/[Marinka Zitnik](marinka@hms.harvard.edu)
|
|
231
|
-
- **Contribute**: See our [Contributing Tutorial](https://zitniklab.hms.harvard.edu/
|
|
253
|
+
- **Contribute**: See our [Contributing Tutorial](https://zitniklab.hms.harvard.edu/ToolUniverse/expand_tooluniverse/comprehensive_tool_guide.html)
|
|
232
254
|
|
|
233
255
|
|
|
234
256
|
|
|
@@ -236,10 +258,10 @@ Please join our [Slack Channel](https://join.slack.com/t/tooluniversehq/shared_i
|
|
|
236
258
|
|
|
237
259
|
- **[Shanghua Gao](https://shgao.site)**
|
|
238
260
|
- **[Richard Zhu](https://www.linkedin.com/in/richard-zhu-4236901a7/)**
|
|
239
|
-
- **[Pengwei Sui](
|
|
261
|
+
- **[Pengwei Sui](https://psui3905.github.io/)**
|
|
240
262
|
- **[Zhenglun Kong](https://zlkong.github.io/homepage/)**
|
|
241
263
|
- **[Sufian Aldogom](mailto:saldogom@mit.edu)**
|
|
242
|
-
- **[Yepeng Huang](
|
|
264
|
+
- **[Yepeng Huang](https://yepeng.notion.site/Yepeng-Huang-16ad8dd1740080c28d4bd3e3d7c1080c)**
|
|
243
265
|
- **[Ayush Noori](https://www.ayushnoori.com/)**
|
|
244
266
|
- **[Reza Shamji](mailto:reza_shamji@hms.harvard.edu)**
|
|
245
267
|
- **[Krishna Parvataneni](mailto:krishna_parvataneni@hms.harvard.edu)**
|
|
@@ -253,53 +275,63 @@ Please join our [Slack Channel](https://join.slack.com/t/tooluniversehq/shared_i
|
|
|
253
275
|
Our comprehensive documentation covers everything from quick start to advanced workflows:
|
|
254
276
|
|
|
255
277
|
### 🚀 Getting Started
|
|
256
|
-
- **[Quick Start Tutorial](https://zitniklab.hms.harvard.edu/
|
|
257
|
-
- **[Installation](https://zitniklab.hms.harvard.edu/
|
|
258
|
-
- **[Getting Started](https://zitniklab.hms.harvard.edu/
|
|
259
|
-
- **[AI-Tool Protocol](https://zitniklab.hms.harvard.edu/
|
|
278
|
+
- **[Quick Start Tutorial](https://zitniklab.hms.harvard.edu/ToolUniverse/quickstart.html)**: 5-minute setup and first query
|
|
279
|
+
- **[Installation](https://zitniklab.hms.harvard.edu/ToolUniverse/installation.html)**: Complete installation options
|
|
280
|
+
- **[Getting Started](https://zitniklab.hms.harvard.edu/ToolUniverse/getting_started.html)**: Step-by-step tutorial
|
|
281
|
+
- **[AI-Tool Protocol](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/interaction_protocol.html)**: Understanding the interaction protocol
|
|
260
282
|
|
|
261
283
|
### 📖 User Guides
|
|
262
|
-
- **[Loading Tools](https://zitniklab.hms.harvard.edu/
|
|
263
|
-
- **[Tool Discovery](https://zitniklab.hms.harvard.edu/
|
|
264
|
-
- **[Tool Caller](https://zitniklab.hms.harvard.edu/
|
|
265
|
-
- **[Tool Composition](https://zitniklab.hms.harvard.edu/
|
|
266
|
-
- **[Scientific Workflows](https://zitniklab.hms.harvard.edu/
|
|
267
|
-
- **[MCP Support](https://zitniklab.hms.harvard.edu/
|
|
268
|
-
- **[Logging](https://zitniklab.hms.harvard.edu/
|
|
284
|
+
- **[Loading Tools](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/loading_tools.html)**: Complete Tutorial to loading tools
|
|
285
|
+
- **[Tool Discovery](https://zitniklab.hms.harvard.edu/ToolUniverse/tutorials/finding_tools.html)**: Find tools by keyword, LLM, and embedding search
|
|
286
|
+
- **[Tool Caller](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/tool_caller.html)**: Primary execution engine
|
|
287
|
+
- **[Tool Composition](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/tool_composition.html)**: Chain tools into workflows
|
|
288
|
+
- **[Scientific Workflows](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/scientific_workflows.html)**: Real-world research scenarios
|
|
289
|
+
- **[MCP Support](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/mcp_support.html)**: Model Context Protocol integration
|
|
290
|
+
- **[Logging](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/logging.html)**: Comprehensive logging configuration
|
|
269
291
|
|
|
270
292
|
### 🛠️ Advanced Features
|
|
271
|
-
- **[Hooks System](https://zitniklab.hms.harvard.edu/
|
|
272
|
-
- **[Hook Configuration](https://zitniklab.hms.harvard.edu/
|
|
273
|
-
- **[File Save Hook](https://zitniklab.hms.harvard.edu/
|
|
274
|
-
- **[Summarization Hook](https://zitniklab.hms.harvard.edu/
|
|
275
|
-
- **[Server Stdio Hooks](https://zitniklab.hms.harvard.edu/
|
|
276
|
-
- **[Expert Feedback](https://zitniklab.hms.harvard.edu/
|
|
277
|
-
- **[Agentic Tools](https://zitniklab.hms.harvard.edu/
|
|
278
|
-
- **[Case Study](https://zitniklab.hms.harvard.edu/
|
|
279
|
-
- **[Tool Optimization](https://zitniklab.hms.harvard.edu/
|
|
293
|
+
- **[Hooks System](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/hooks/index.html)**: Intelligent output processing
|
|
294
|
+
- **[Hook Configuration](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/hooks/hook_configuration.html)**: Configure hooks for different outputs
|
|
295
|
+
- **[File Save Hook](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/hooks/file_save_hook.html)**: Save tool outputs to files
|
|
296
|
+
- **[Summarization Hook](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/hooks/summarization_hook.html)**: Summarize tool outputs
|
|
297
|
+
- **[Server Stdio Hooks](https://zitniklab.hms.harvard.edu/ToolUniverse/guide/hooks/server_stdio_hooks.html)**: Server communication hooks
|
|
298
|
+
- **[Expert Feedback](https://zitniklab.hms.harvard.edu/ToolUniverse/tutorials/expert_feedback.html)**: Human-in-the-loop consultation
|
|
299
|
+
- **[Agentic Tools](https://zitniklab.hms.harvard.edu/ToolUniverse/tutorials/agentic_tools_tutorial.html)**: AI-powered tool development
|
|
300
|
+
- **[Case Study](https://zitniklab.hms.harvard.edu/ToolUniverse/tutorials/tooluniverse_case_study.html)**: End-to-end drug discovery workflow
|
|
301
|
+
- **[Tool Optimization](https://zitniklab.hms.harvard.edu/ToolUniverse/tutorials/optimization/Tool_Description_Optimizer_Tutorial.html)**: Optimize tool descriptions for better performance
|
|
280
302
|
|
|
281
303
|
### 🔧 Expanding ToolUniverse
|
|
282
|
-
- **[Architecture](https://zitniklab.hms.harvard.edu/
|
|
283
|
-
- **[Local Tool Registration](https://zitniklab.hms.harvard.edu/
|
|
284
|
-
- **[Remote Tool Registration](https://zitniklab.hms.harvard.edu/
|
|
285
|
-
- **[Contributing Tools](https://zitniklab.hms.harvard.edu/
|
|
286
|
-
- **[Adding Tools Tutorial](https://zitniklab.hms.harvard.edu/
|
|
287
|
-
- **[MCP Tool Registration](https://zitniklab.hms.harvard.edu/
|
|
304
|
+
- **[Architecture](https://zitniklab.hms.harvard.edu/ToolUniverse/expand_tooluniverse/architecture.html)**: System architecture overview
|
|
305
|
+
- **[Local Tool Registration](https://zitniklab.hms.harvard.edu/ToolUniverse/expand_tooluniverse/local_tool_registration.html)**: Create custom tools
|
|
306
|
+
- **[Remote Tool Registration](https://zitniklab.hms.harvard.edu/ToolUniverse/expand_tooluniverse/remote_tool_registration.html)**: Integrate external services
|
|
307
|
+
- **[Contributing Tools](https://zitniklab.hms.harvard.edu/ToolUniverse/expand_tooluniverse/comprehensive_tool_guide.html)**: Complete contribution guide
|
|
308
|
+
- **[Adding Tools Tutorial](https://zitniklab.hms.harvard.edu/ToolUniverse/tutorials/addtools/Adding_Tools_Tutorial.html)**: Step-by-step tool addition guide
|
|
309
|
+
- **[MCP Tool Registration](https://zitniklab.hms.harvard.edu/ToolUniverse/tutorials/addtools/mcp_tool_registration_en.html)**: Register tools via MCP
|
|
288
310
|
|
|
289
311
|
### 📚 API Reference
|
|
290
|
-
- **[API Directory](https://zitniklab.hms.harvard.edu/
|
|
291
|
-
- **[Core Modules](https://zitniklab.hms.harvard.edu/
|
|
292
|
-
- **[Tool Classes](https://zitniklab.hms.harvard.edu/
|
|
293
|
-
- **[Compose Scripts](https://zitniklab.hms.harvard.edu/
|
|
294
|
-
- **[MCP Integration](https://zitniklab.hms.harvard.edu/
|
|
312
|
+
- **[API Directory](https://zitniklab.hms.harvard.edu/ToolUniverse/api/modules.html)**: Complete module listing
|
|
313
|
+
- **[Core Modules](https://zitniklab.hms.harvard.edu/ToolUniverse/api/tooluniverse.html)**: Main ToolUniverse class and utilities
|
|
314
|
+
- **[Tool Classes](https://zitniklab.hms.harvard.edu/ToolUniverse/api/tooluniverse.base_tool.html)**: Base tool classes and implementations
|
|
315
|
+
- **[Compose Scripts](https://zitniklab.hms.harvard.edu/ToolUniverse/api/tooluniverse.compose_scripts.html)**: Tool composition utilities
|
|
316
|
+
- **[MCP Integration](https://zitniklab.hms.harvard.edu/ToolUniverse/api/tooluniverse.mcp_integration.html)**: Model Context Protocol support
|
|
295
317
|
|
|
296
|
-
→ **Browse All Documentation**: [ToolUniverse Documentation](https://zitniklab.hms.harvard.edu/
|
|
318
|
+
→ **Browse All Documentation**: [ToolUniverse Documentation](https://zitniklab.hms.harvard.edu/ToolUniverse/)
|
|
297
319
|
|
|
298
320
|
|
|
299
321
|
### Citation
|
|
300
322
|
|
|
301
323
|
```
|
|
302
|
-
@
|
|
324
|
+
@article{gao2025democratizingaiscientistsusing,
|
|
325
|
+
title={Democratizing AI scientists using ToolUniverse},
|
|
326
|
+
author={Shanghua Gao and Richard Zhu and Pengwei Sui and Zhenglun Kong and Sufian Aldogom and Yepeng Huang and Ayush Noori and Reza Shamji and Krishna Parvataneni and Theodoros Tsiligkaridis and Marinka Zitnik},
|
|
327
|
+
year={2025},
|
|
328
|
+
eprint={2509.23426},
|
|
329
|
+
archivePrefix={arXiv},
|
|
330
|
+
primaryClass={cs.AI},
|
|
331
|
+
url={https://arxiv.org/abs/2509.23426},
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
@article{gao2025txagent,
|
|
303
335
|
title={TxAgent: An AI Agent for Therapeutic Reasoning Across a Universe of Tools},
|
|
304
336
|
author={Shanghua Gao and Richard Zhu and Zhenglun Kong and Ayush Noori and Xiaorui Su and Curtis Ginder and Theodoros Tsiligkaridis and Marinka Zitnik},
|
|
305
337
|
year={2025},
|
|
@@ -310,11 +342,6 @@ Our comprehensive documentation covers everything from quick start to advanced w
|
|
|
310
342
|
}
|
|
311
343
|
```
|
|
312
344
|
|
|
313
|
-
|
|
314
|
-
### Acknowledgments
|
|
315
|
-
|
|
316
|
-
ToolUniverse is developed by the [Zitnik Lab](https://zitniklab.hms.harvard.edu/) at Harvard Medical School in collaboration with MIT Lincoln Laboratory. We thank the scientific community for their valuable feedback and contributions.
|
|
317
|
-
|
|
318
345
|
---
|
|
319
346
|
|
|
320
347
|
*Democratizing AI agents for science with ToolUniverse.*
|