tooluniverse 0.1.4__py3-none-any.whl → 1.0.0__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.

Files changed (187) hide show
  1. tooluniverse/__init__.py +340 -4
  2. tooluniverse/admetai_tool.py +84 -0
  3. tooluniverse/agentic_tool.py +563 -0
  4. tooluniverse/alphafold_tool.py +96 -0
  5. tooluniverse/base_tool.py +129 -6
  6. tooluniverse/boltz_tool.py +207 -0
  7. tooluniverse/chem_tool.py +192 -0
  8. tooluniverse/compose_scripts/__init__.py +1 -0
  9. tooluniverse/compose_scripts/biomarker_discovery.py +293 -0
  10. tooluniverse/compose_scripts/comprehensive_drug_discovery.py +186 -0
  11. tooluniverse/compose_scripts/drug_safety_analyzer.py +89 -0
  12. tooluniverse/compose_scripts/literature_tool.py +34 -0
  13. tooluniverse/compose_scripts/output_summarizer.py +279 -0
  14. tooluniverse/compose_scripts/tool_description_optimizer.py +681 -0
  15. tooluniverse/compose_scripts/tool_discover.py +705 -0
  16. tooluniverse/compose_scripts/tool_graph_composer.py +448 -0
  17. tooluniverse/compose_tool.py +371 -0
  18. tooluniverse/ctg_tool.py +1002 -0
  19. tooluniverse/custom_tool.py +81 -0
  20. tooluniverse/dailymed_tool.py +108 -0
  21. tooluniverse/data/admetai_tools.json +155 -0
  22. tooluniverse/data/agentic_tools.json +1156 -0
  23. tooluniverse/data/alphafold_tools.json +87 -0
  24. tooluniverse/data/boltz_tools.json +9 -0
  25. tooluniverse/data/chembl_tools.json +16 -0
  26. tooluniverse/data/clait_tools.json +108 -0
  27. tooluniverse/data/clinicaltrials_gov_tools.json +326 -0
  28. tooluniverse/data/compose_tools.json +202 -0
  29. tooluniverse/data/dailymed_tools.json +70 -0
  30. tooluniverse/data/dataset_tools.json +646 -0
  31. tooluniverse/data/disease_target_score_tools.json +712 -0
  32. tooluniverse/data/efo_tools.json +17 -0
  33. tooluniverse/data/embedding_tools.json +319 -0
  34. tooluniverse/data/enrichr_tools.json +31 -0
  35. tooluniverse/data/europe_pmc_tools.json +22 -0
  36. tooluniverse/data/expert_feedback_tools.json +10 -0
  37. tooluniverse/data/fda_drug_adverse_event_tools.json +491 -0
  38. tooluniverse/data/fda_drug_labeling_tools.json +544 -168
  39. tooluniverse/data/fda_drugs_with_brand_generic_names_for_tool.py +76929 -148860
  40. tooluniverse/data/finder_tools.json +209 -0
  41. tooluniverse/data/gene_ontology_tools.json +113 -0
  42. tooluniverse/data/gwas_tools.json +1082 -0
  43. tooluniverse/data/hpa_tools.json +333 -0
  44. tooluniverse/data/humanbase_tools.json +47 -0
  45. tooluniverse/data/idmap_tools.json +74 -0
  46. tooluniverse/data/mcp_client_tools_example.json +113 -0
  47. tooluniverse/data/mcpautoloadertool_defaults.json +28 -0
  48. tooluniverse/data/medlineplus_tools.json +141 -0
  49. tooluniverse/data/monarch_tools.json +1 -1
  50. tooluniverse/data/openalex_tools.json +36 -0
  51. tooluniverse/data/opentarget_tools.json +82 -58
  52. tooluniverse/data/output_summarization_tools.json +101 -0
  53. tooluniverse/data/packages/bioinformatics_core_tools.json +1756 -0
  54. tooluniverse/data/packages/categorized_tools.txt +206 -0
  55. tooluniverse/data/packages/cheminformatics_tools.json +347 -0
  56. tooluniverse/data/packages/earth_sciences_tools.json +74 -0
  57. tooluniverse/data/packages/genomics_tools.json +776 -0
  58. tooluniverse/data/packages/image_processing_tools.json +38 -0
  59. tooluniverse/data/packages/machine_learning_tools.json +789 -0
  60. tooluniverse/data/packages/neuroscience_tools.json +62 -0
  61. tooluniverse/data/packages/original_tools.txt +0 -0
  62. tooluniverse/data/packages/physics_astronomy_tools.json +62 -0
  63. tooluniverse/data/packages/scientific_computing_tools.json +560 -0
  64. tooluniverse/data/packages/single_cell_tools.json +453 -0
  65. tooluniverse/data/packages/software_tools.json +4954 -0
  66. tooluniverse/data/packages/structural_biology_tools.json +396 -0
  67. tooluniverse/data/packages/visualization_tools.json +399 -0
  68. tooluniverse/data/pubchem_tools.json +215 -0
  69. tooluniverse/data/pubtator_tools.json +68 -0
  70. tooluniverse/data/rcsb_pdb_tools.json +1332 -0
  71. tooluniverse/data/reactome_tools.json +19 -0
  72. tooluniverse/data/semantic_scholar_tools.json +26 -0
  73. tooluniverse/data/special_tools.json +2 -25
  74. tooluniverse/data/tool_composition_tools.json +88 -0
  75. tooluniverse/data/toolfinderkeyword_defaults.json +34 -0
  76. tooluniverse/data/txagent_client_tools.json +9 -0
  77. tooluniverse/data/uniprot_tools.json +211 -0
  78. tooluniverse/data/url_fetch_tools.json +94 -0
  79. tooluniverse/data/uspto_downloader_tools.json +9 -0
  80. tooluniverse/data/uspto_tools.json +811 -0
  81. tooluniverse/data/xml_tools.json +3275 -0
  82. tooluniverse/dataset_tool.py +296 -0
  83. tooluniverse/default_config.py +165 -0
  84. tooluniverse/efo_tool.py +42 -0
  85. tooluniverse/embedding_database.py +630 -0
  86. tooluniverse/embedding_sync.py +396 -0
  87. tooluniverse/enrichr_tool.py +266 -0
  88. tooluniverse/europe_pmc_tool.py +52 -0
  89. tooluniverse/execute_function.py +1775 -95
  90. tooluniverse/extended_hooks.py +444 -0
  91. tooluniverse/gene_ontology_tool.py +194 -0
  92. tooluniverse/graphql_tool.py +158 -36
  93. tooluniverse/gwas_tool.py +358 -0
  94. tooluniverse/hpa_tool.py +1645 -0
  95. tooluniverse/humanbase_tool.py +389 -0
  96. tooluniverse/logging_config.py +254 -0
  97. tooluniverse/mcp_client_tool.py +764 -0
  98. tooluniverse/mcp_integration.py +413 -0
  99. tooluniverse/mcp_tool_registry.py +925 -0
  100. tooluniverse/medlineplus_tool.py +337 -0
  101. tooluniverse/openalex_tool.py +228 -0
  102. tooluniverse/openfda_adv_tool.py +283 -0
  103. tooluniverse/openfda_tool.py +393 -160
  104. tooluniverse/output_hook.py +1122 -0
  105. tooluniverse/package_tool.py +195 -0
  106. tooluniverse/pubchem_tool.py +158 -0
  107. tooluniverse/pubtator_tool.py +168 -0
  108. tooluniverse/rcsb_pdb_tool.py +38 -0
  109. tooluniverse/reactome_tool.py +108 -0
  110. tooluniverse/remote/boltz/boltz_mcp_server.py +50 -0
  111. tooluniverse/remote/depmap_24q2/depmap_24q2_mcp_tool.py +442 -0
  112. tooluniverse/remote/expert_feedback/human_expert_mcp_tools.py +2013 -0
  113. tooluniverse/remote/expert_feedback/simple_test.py +23 -0
  114. tooluniverse/remote/expert_feedback/start_web_interface.py +188 -0
  115. tooluniverse/remote/expert_feedback/web_only_interface.py +0 -0
  116. tooluniverse/remote/expert_feedback_mcp/human_expert_mcp_server.py +1611 -0
  117. tooluniverse/remote/expert_feedback_mcp/simple_test.py +34 -0
  118. tooluniverse/remote/expert_feedback_mcp/start_web_interface.py +91 -0
  119. tooluniverse/remote/immune_compass/compass_tool.py +327 -0
  120. tooluniverse/remote/pinnacle/pinnacle_tool.py +328 -0
  121. tooluniverse/remote/transcriptformer/transcriptformer_tool.py +586 -0
  122. tooluniverse/remote/uspto_downloader/uspto_downloader_mcp_server.py +61 -0
  123. tooluniverse/remote/uspto_downloader/uspto_downloader_tool.py +120 -0
  124. tooluniverse/remote_tool.py +99 -0
  125. tooluniverse/restful_tool.py +53 -30
  126. tooluniverse/scripts/generate_tool_graph.py +408 -0
  127. tooluniverse/scripts/visualize_tool_graph.py +829 -0
  128. tooluniverse/semantic_scholar_tool.py +62 -0
  129. tooluniverse/smcp.py +2452 -0
  130. tooluniverse/smcp_server.py +975 -0
  131. tooluniverse/test/mcp_server_test.py +0 -0
  132. tooluniverse/test/test_admetai_tool.py +370 -0
  133. tooluniverse/test/test_agentic_tool.py +129 -0
  134. tooluniverse/test/test_alphafold_tool.py +71 -0
  135. tooluniverse/test/test_chem_tool.py +37 -0
  136. tooluniverse/test/test_compose_lieraturereview.py +63 -0
  137. tooluniverse/test/test_compose_tool.py +448 -0
  138. tooluniverse/test/test_dailymed.py +69 -0
  139. tooluniverse/test/test_dataset_tool.py +200 -0
  140. tooluniverse/test/test_disease_target_score.py +56 -0
  141. tooluniverse/test/test_drugbank_filter_examples.py +179 -0
  142. tooluniverse/test/test_efo.py +31 -0
  143. tooluniverse/test/test_enrichr_tool.py +21 -0
  144. tooluniverse/test/test_europe_pmc_tool.py +20 -0
  145. tooluniverse/test/test_fda_adv.py +95 -0
  146. tooluniverse/test/test_fda_drug_labeling.py +91 -0
  147. tooluniverse/test/test_gene_ontology_tools.py +66 -0
  148. tooluniverse/test/test_gwas_tool.py +139 -0
  149. tooluniverse/test/test_hpa.py +625 -0
  150. tooluniverse/test/test_humanbase_tool.py +20 -0
  151. tooluniverse/test/test_idmap_tools.py +61 -0
  152. tooluniverse/test/test_mcp_server.py +211 -0
  153. tooluniverse/test/test_mcp_tool.py +247 -0
  154. tooluniverse/test/test_medlineplus.py +220 -0
  155. tooluniverse/test/test_openalex_tool.py +32 -0
  156. tooluniverse/test/test_opentargets.py +28 -0
  157. tooluniverse/test/test_pubchem_tool.py +116 -0
  158. tooluniverse/test/test_pubtator_tool.py +37 -0
  159. tooluniverse/test/test_rcsb_pdb_tool.py +86 -0
  160. tooluniverse/test/test_reactome.py +54 -0
  161. tooluniverse/test/test_semantic_scholar_tool.py +24 -0
  162. tooluniverse/test/test_software_tools.py +147 -0
  163. tooluniverse/test/test_tool_description_optimizer.py +49 -0
  164. tooluniverse/test/test_tool_finder.py +26 -0
  165. tooluniverse/test/test_tool_finder_llm.py +252 -0
  166. tooluniverse/test/test_tools_find.py +195 -0
  167. tooluniverse/test/test_uniprot_tools.py +74 -0
  168. tooluniverse/test/test_uspto_tool.py +72 -0
  169. tooluniverse/test/test_xml_tool.py +113 -0
  170. tooluniverse/tool_finder_embedding.py +267 -0
  171. tooluniverse/tool_finder_keyword.py +693 -0
  172. tooluniverse/tool_finder_llm.py +699 -0
  173. tooluniverse/tool_graph_web_ui.py +955 -0
  174. tooluniverse/tool_registry.py +416 -0
  175. tooluniverse/uniprot_tool.py +155 -0
  176. tooluniverse/url_tool.py +253 -0
  177. tooluniverse/uspto_tool.py +240 -0
  178. tooluniverse/utils.py +369 -41
  179. tooluniverse/xml_tool.py +369 -0
  180. tooluniverse-1.0.0.dist-info/METADATA +377 -0
  181. tooluniverse-1.0.0.dist-info/RECORD +186 -0
  182. {tooluniverse-0.1.4.dist-info → tooluniverse-1.0.0.dist-info}/WHEEL +1 -1
  183. tooluniverse-1.0.0.dist-info/entry_points.txt +9 -0
  184. tooluniverse-0.1.4.dist-info/METADATA +0 -141
  185. tooluniverse-0.1.4.dist-info/RECORD +0 -18
  186. {tooluniverse-0.1.4.dist-info → tooluniverse-1.0.0.dist-info}/licenses/LICENSE +0 -0
  187. {tooluniverse-0.1.4.dist-info → tooluniverse-1.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,399 @@
1
+ [
2
+ {
3
+ "type": "PackageTool",
4
+ "name": "get_matplotlib_info",
5
+ "description": "Get comprehensive information about Matplotlib – comprehensive library for creating visualizations in Python",
6
+ "parameter": {
7
+ "type": "object",
8
+ "properties": {
9
+ "include_examples": {
10
+ "type": "boolean",
11
+ "description": "Whether to include usage examples and quick start guide",
12
+ "default": true
13
+ }
14
+ }
15
+ },
16
+ "package_name": "matplotlib",
17
+ "local_info": {
18
+ "name": "Matplotlib",
19
+ "description": "Comprehensive library for creating static, animated, and interactive visualizations in Python. Matplotlib makes easy things easy and hard things possible.",
20
+ "category": "Data Visualization",
21
+ "import_name": "matplotlib",
22
+ "popularity": 87,
23
+ "keywords": [
24
+ "plotting",
25
+ "visualization",
26
+ "charts",
27
+ "graphs",
28
+ "figures"
29
+ ],
30
+ "documentation": "https://matplotlib.org/stable/",
31
+ "repository": "https://github.com/matplotlib/matplotlib",
32
+ "installation": {
33
+ "pip": "pip install matplotlib",
34
+ "conda": "conda install matplotlib"
35
+ },
36
+ "usage_example": "import matplotlib.pyplot as plt\nimport numpy as np\n\n# Create data\nx = np.linspace(0, 10, 100)\ny = np.sin(x)\n\n# Create plot\nplt.figure(figsize=(10, 6))\nplt.plot(x, y, label='sin(x)')\nplt.xlabel('x')\nplt.ylabel('y')\nplt.title('Sine Wave')\nplt.legend()\nplt.grid(True)\nplt.show()",
37
+ "quick_start": [
38
+ "Install: pip install matplotlib",
39
+ "Import: import matplotlib.pyplot as plt",
40
+ "Plot: plt.plot(x, y), plt.scatter(x, y)",
41
+ "Customize: plt.xlabel(), plt.title(), plt.legend()",
42
+ "Show: plt.show()"
43
+ ]
44
+ }
45
+ },
46
+ {
47
+ "type": "PackageTool",
48
+ "name": "get_seaborn_info",
49
+ "description": "Get comprehensive information about Seaborn – statistical data visualization",
50
+ "parameter": {
51
+ "type": "object",
52
+ "properties": {
53
+ "include_examples": {
54
+ "type": "boolean",
55
+ "description": "Whether to include usage examples and quick start guide",
56
+ "default": true
57
+ }
58
+ }
59
+ },
60
+ "package_name": "seaborn",
61
+ "local_info": {
62
+ "name": "Seaborn",
63
+ "description": "Statistical data visualization library based on matplotlib. Provides a high-level interface for drawing attractive and informative statistical graphics.",
64
+ "category": "Data Visualization",
65
+ "import_name": "seaborn",
66
+ "popularity": 85,
67
+ "keywords": [
68
+ "statistical visualization",
69
+ "statistical graphics",
70
+ "data exploration",
71
+ "plotting",
72
+ "heatmaps"
73
+ ],
74
+ "documentation": "https://seaborn.pydata.org/",
75
+ "repository": "https://github.com/mwaskom/seaborn",
76
+ "installation": {
77
+ "pip": "pip install seaborn",
78
+ "conda": "conda install seaborn"
79
+ },
80
+ "usage_example": "import seaborn as sns\nimport matplotlib.pyplot as plt\nfrom sklearn.datasets import load_iris\nimport pandas as pd\n\n# Load and prepare data\niris = load_iris()\ndf = pd.DataFrame(iris.data, columns=iris.feature_names)\ndf['species'] = iris.target_names[iris.target]\n\n# Create plots\nsns.pairplot(df, hue='species')\nplt.show()\n\n# Correlation heatmap\nsns.heatmap(df.corr(), annot=True, cmap='viridis')\nplt.show()",
81
+ "quick_start": [
82
+ "Install: pip install seaborn",
83
+ "Import: import seaborn as sns",
84
+ "Basic plots: sns.scatterplot(), sns.lineplot()",
85
+ "Statistical: sns.boxplot(), sns.violinplot()",
86
+ "Matrix: sns.heatmap(), sns.clustermap()"
87
+ ]
88
+ }
89
+ },
90
+ {
91
+ "type": "PackageTool",
92
+ "name": "get_opencv_info",
93
+ "description": "Get comprehensive information about OpenCV-Python – computer vision library",
94
+ "parameter": {
95
+ "type": "object",
96
+ "properties": {
97
+ "include_examples": {
98
+ "type": "boolean",
99
+ "description": "Whether to include usage examples and quick start guide",
100
+ "default": true
101
+ }
102
+ }
103
+ },
104
+ "package_name": "opencv-python",
105
+ "local_info": {
106
+ "name": "OpenCV",
107
+ "description": "Open Source Computer Vision Library. Provides tools for image processing, computer vision, machine learning, and video analysis with optimized algorithms.",
108
+ "category": "Computer Vision",
109
+ "import_name": "cv2",
110
+ "popularity": 90,
111
+ "keywords": [
112
+ "computer vision",
113
+ "image processing",
114
+ "video analysis",
115
+ "object detection",
116
+ "machine learning"
117
+ ],
118
+ "documentation": "https://docs.opencv.org/",
119
+ "repository": "https://github.com/opencv/opencv-python",
120
+ "installation": {
121
+ "pip": "pip install opencv-python",
122
+ "conda": "conda install -c conda-forge opencv"
123
+ },
124
+ "usage_example": "import cv2\nimport numpy as np\n\n# Read image\nimg = cv2.imread('image.jpg')\n\n# Convert to grayscale\ngray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n\n# Apply Gaussian blur\nblurred = cv2.GaussianBlur(gray, (15, 15), 0)\n\n# Edge detection\nedges = cv2.Canny(blurred, 50, 150)\n\n# Display result\ncv2.imshow('Edges', edges)\ncv2.waitKey(0)\ncv2.destroyAllWindows()",
125
+ "quick_start": [
126
+ "Install: pip install opencv-python",
127
+ "Import: import cv2",
128
+ "Read image: img = cv2.imread('image.jpg')",
129
+ "Process: gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)",
130
+ "Display: cv2.imshow('Image', img); cv2.waitKey(0)"
131
+ ]
132
+ }
133
+ },
134
+ {
135
+ "type": "PackageTool",
136
+ "name": "get_scikit_image_info",
137
+ "description": "Get comprehensive information about scikit-image – image processing in Python",
138
+ "parameter": {
139
+ "type": "object",
140
+ "properties": {
141
+ "info_type": {
142
+ "type": "string",
143
+ "enum": [
144
+ "overview",
145
+ "installation",
146
+ "usage",
147
+ "documentation"
148
+ ],
149
+ "description": "Type of information to retrieve about scikit-image"
150
+ }
151
+ },
152
+ "required": [
153
+ "info_type"
154
+ ]
155
+ },
156
+ "package_name": "scikit-image",
157
+ "local_info": {
158
+ "name": "scikit-image",
159
+ "description": "Collection of algorithms for image processing in Python. Provides a wide range of image processing routines including segmentation, geometric transformations, color space manipulation, analysis, filtering, morphology, and feature detection.",
160
+ "category": "Image Processing",
161
+ "import_name": "skimage",
162
+ "popularity": 82,
163
+ "keywords": [
164
+ "image processing",
165
+ "segmentation",
166
+ "filtering",
167
+ "morphology",
168
+ "feature detection"
169
+ ],
170
+ "documentation": "https://scikit-image.org/docs/stable/",
171
+ "repository": "https://github.com/scikit-image/scikit-image",
172
+ "installation": {
173
+ "pip": "pip install scikit-image",
174
+ "conda": "conda install -c conda-forge scikit-image"
175
+ },
176
+ "usage_example": "from skimage import data, filters, segmentation\nimport matplotlib.pyplot as plt\n\n# Load sample image\nimage = data.camera()\n\n# Apply Gaussian filter\nfiltered = filters.gaussian(image, sigma=1)\n\n# Segment image\nsegments = segmentation.slic(image, n_segments=100)\n\n# Display results\nfig, axes = plt.subplots(1, 3, figsize=(15, 5))\naxes[0].imshow(image, cmap='gray')\naxes[1].imshow(filtered, cmap='gray')\naxes[2].imshow(segments)\nplt.show()",
177
+ "quick_start": [
178
+ "Install: pip install scikit-image",
179
+ "Import: from skimage import data, filters",
180
+ "Load: image = data.camera()",
181
+ "Process: filtered = filters.gaussian(image)",
182
+ "Analyze: Use segmentation, morphology, measure modules"
183
+ ]
184
+ }
185
+ },
186
+ {
187
+ "type": "PackageTool",
188
+ "name": "get_cellpose_info",
189
+ "description": "Get comprehensive information about Cellpose – cell segmentation algorithm",
190
+ "parameter": {
191
+ "type": "object",
192
+ "properties": {
193
+ "include_examples": {
194
+ "type": "boolean",
195
+ "description": "Whether to include usage examples and quick start guide",
196
+ "default": true
197
+ }
198
+ }
199
+ },
200
+ "package_name": "cellpose",
201
+ "local_info": {
202
+ "name": "Cellpose",
203
+ "description": "Generalist algorithm for cell segmentation using deep learning. Can segment cells in various imaging modalities without training on new data.",
204
+ "category": "Cell Segmentation",
205
+ "import_name": "cellpose",
206
+ "popularity": 85,
207
+ "keywords": [
208
+ "cell segmentation",
209
+ "deep learning",
210
+ "microscopy",
211
+ "image analysis",
212
+ "biology"
213
+ ],
214
+ "documentation": "https://cellpose.readthedocs.io/",
215
+ "repository": "https://github.com/MouseLand/cellpose",
216
+ "installation": {
217
+ "pip": "pip install cellpose[gui]",
218
+ "conda": "conda install -c conda-forge cellpose"
219
+ },
220
+ "usage_example": "from cellpose import models, io\nimport numpy as np\n\n# Load model\nmodel = models.Cellpose(gpu=False, model_type='cyto')\n\n# Load image\nimg = io.imread('cells.png')\n\n# Run segmentation\nmasks, flows, styles, diams = model.eval(img, \n diameter=None, \n channels=[0,0])\n\n# Save results\nio.masks_flows_to_seg(img, masks, flows, diams, 'cells_seg.png')\n\nprint(f'Found {len(np.unique(masks))-1} cells')",
221
+ "quick_start": [
222
+ "Install: pip install cellpose[gui]",
223
+ "Import: from cellpose import models, io",
224
+ "Load model: model = models.Cellpose(model_type='cyto')",
225
+ "Segment: masks, flows, styles, diams = model.eval(img)",
226
+ "Save: io.masks_flows_to_seg(img, masks, flows, diams)"
227
+ ]
228
+ }
229
+ },
230
+ {
231
+ "type": "PackageTool",
232
+ "name": "get_igraph_info",
233
+ "description": "Get comprehensive information about igraph – network analysis and visualization",
234
+ "parameter": {
235
+ "type": "object",
236
+ "properties": {
237
+ "include_examples": {
238
+ "type": "boolean",
239
+ "description": "Whether to include usage examples and quick start guide",
240
+ "default": true
241
+ }
242
+ }
243
+ },
244
+ "package_name": "igraph",
245
+ "local_info": {
246
+ "name": "igraph",
247
+ "description": "Python interface to the igraph high performance graph library. Provides comprehensive tools for network analysis, graph algorithms, and visualization.",
248
+ "category": "Network Analysis",
249
+ "import_name": "igraph",
250
+ "popularity": 85,
251
+ "keywords": [
252
+ "network analysis",
253
+ "graph theory",
254
+ "social networks",
255
+ "visualization",
256
+ "clustering"
257
+ ],
258
+ "documentation": "https://igraph.org/python/",
259
+ "repository": "https://github.com/igraph/python-igraph",
260
+ "installation": {
261
+ "pip": "pip install igraph",
262
+ "conda": "conda install -c conda-forge igraph"
263
+ },
264
+ "usage_example": "import igraph as ig\nimport matplotlib.pyplot as plt\n\n# Create random graph\ng = ig.Graph.Erdos_Renyi(n=100, p=0.05)\n\n# Calculate basic properties\nprint(f'Vertices: {g.vcount()}')\nprint(f'Edges: {g.ecount()}')\nprint(f'Density: {g.density():.3f}')\nprint(f'Average degree: {sum(g.degree())/g.vcount():.2f}')\n\n# Find communities\ncommunities = g.community_louvain()\nprint(f'Number of communities: {len(communities)}')\n\n# Calculate centrality measures\nbetweenness = g.betweenness()\ncloseness = g.closeness()\n\n# Visualize (requires cairo)\n# ig.plot(g, target='network.png')",
265
+ "quick_start": [
266
+ "1. Install igraph: pip install igraph",
267
+ "2. Import: import igraph as ig",
268
+ "3. Create graph: g = ig.Graph.Erdos_Renyi(n=100, p=0.05)",
269
+ "4. Analyze: g.density(), g.community_louvain()",
270
+ "5. Visualize: ig.plot(g)"
271
+ ]
272
+ }
273
+ },
274
+ {
275
+ "type": "PackageTool",
276
+ "name": "get_plantcv_info",
277
+ "description": "Get comprehensive information about PlantCV – plant phenotyping with image analysis",
278
+ "parameter": {
279
+ "type": "object",
280
+ "properties": {
281
+ "info_type": {
282
+ "type": "string",
283
+ "enum": [
284
+ "overview",
285
+ "installation",
286
+ "usage",
287
+ "documentation"
288
+ ],
289
+ "description": "Type of information to retrieve about PlantCV"
290
+ }
291
+ },
292
+ "required": [
293
+ "info_type"
294
+ ]
295
+ },
296
+ "package_name": "plantcv",
297
+ "local_info": {
298
+ "name": "PlantCV",
299
+ "description": "Plant phenotyping with image analysis. Provides tools for analyzing plant images to extract quantitative phenotypic data including leaf area, color analysis, and morphological measurements.",
300
+ "category": "Plant Biology / Image Analysis",
301
+ "import_name": "plantcv",
302
+ "popularity": 65,
303
+ "keywords": [
304
+ "plant phenotyping",
305
+ "image analysis",
306
+ "computer vision",
307
+ "plant biology",
308
+ "morphology"
309
+ ],
310
+ "documentation": "https://plantcv.readthedocs.io/",
311
+ "repository": "https://github.com/danforthcenter/plantcv",
312
+ "installation": {
313
+ "pip": "pip install plantcv",
314
+ "conda": "conda install -c conda-forge plantcv"
315
+ },
316
+ "usage_example": "import plantcv as pcv\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom matplotlib.patches import Rectangle\nimport tempfile\nimport os\n\nprint('PlantCV - Plant Phenotyping with Image Analysis')\nprint('=' * 50)\n\n# Set PlantCV parameters\npcv.params.debug = None # Set to 'print' for debug mode\npcv.params.device = 0\n\n# Create synthetic plant-like image for demonstration\nprint('Creating synthetic plant image for analysis...')\n\n# Create a synthetic plant image\nimg_height, img_width = 400, 300\nimg = np.zeros((img_height, img_width, 3), dtype=np.uint8)\n\n# Background (soil-like)\nimg[:, :] = [139, 69, 19] # Brown background\n\n# Add some noise to background\nnoise = np.random.randint(-20, 20, (img_height, img_width, 3))\nimg = np.clip(img.astype(int) + noise, 0, 255).astype(np.uint8)\n\n# Create plant leaves (green regions)\nleaves = [\n {'center': (150, 100), 'size': (80, 40), 'angle': 30},\n {'center': (200, 120), 'size': (70, 35), 'angle': -15},\n {'center': (180, 160), 'size': (60, 30), 'angle': 45},\n {'center': (140, 180), 'size': (65, 32), 'angle': -30}\n]\n\n# Draw elliptical leaves\nfrom matplotlib.patches import Ellipse\nfrom PIL import Image, ImageDraw\n\n# Convert to PIL for easier drawing\npil_img = Image.fromarray(img)\ndraw = ImageDraw.Draw(pil_img)\n\nfor leaf in leaves:\n center_x, center_y = leaf['center']\n width, height = leaf['size']\n \n # Calculate ellipse bounds\n left = center_x - width // 2\n top = center_y - height // 2\n right = center_x + width // 2\n bottom = center_y + height // 2\n \n # Draw leaf with green color variations\n green_color = (34 + np.random.randint(-10, 10), \n 139 + np.random.randint(-20, 20), \n 34 + np.random.randint(-10, 10))\n \n draw.ellipse([left, top, right, bottom], fill=green_color)\n\n# Convert back to numpy\nimg = np.array(pil_img)\n\nprint(f'Created synthetic plant image: {img.shape}')\nprint(f'Image dimensions: {img_width} × {img_height} pixels')\n\n# Basic PlantCV analysis workflow\nprint('\\n=== PlantCV Analysis Workflow ===')\n\n# 1. Color space conversion\nprint('\\n1. Color Space Analysis:')\n\n# Convert to different color spaces\nimg_hsv = pcv.rgb2gray_hsv(rgb_img=img, channel='s')\nimg_lab = pcv.rgb2gray_lab(rgb_img=img, channel='a')\n\nprint(f'RGB to HSV (S channel): shape {img_hsv.shape}')\nprint(f'RGB to LAB (A channel): shape {img_lab.shape}')\n\n# 2. Thresholding to segment plant material\nprint('\\n2. Plant Segmentation:')\n\n# Threshold in HSV color space to isolate green plant material\n# Create a simple threshold for green regions\nimg_gray = pcv.rgb2gray(rgb_img=img)\n\n# Manual thresholding for green detection\n# In real applications, you'd use pcv.threshold functions\ngreen_channel = img[:, :, 1] # Green channel\nred_channel = img[:, :, 0] # Red channel\nblue_channel = img[:, :, 2] # Blue channel\n\n# Simple green detection: green > red and green > blue\ngreen_mask = (green_channel > red_channel + 20) & (green_channel > blue_channel + 20)\ngreen_mask = green_mask.astype(np.uint8) * 255\n\nprint(f'Green segmentation mask created: {np.sum(green_mask > 0)} green pixels')\nprint(f'Plant coverage: {np.sum(green_mask > 0) / (img_width * img_height) * 100:.1f}%')\n\n# 3. Morphological operations\nprint('\\n3. Morphological Operations:')\n\n# Clean up mask with morphological operations\nkernel = np.ones((3, 3), np.uint8)\n\n# Simulated morphological operations (PlantCV has built-in functions)\nimport scipy.ndimage as ndimage\n\n# Remove small objects\nopened_mask = ndimage.binary_opening(green_mask > 0, structure=kernel)\nopened_mask = (opened_mask * 255).astype(np.uint8)\n\n# Fill small holes\nclosed_mask = ndimage.binary_closing(opened_mask > 0, structure=kernel)\nclosed_mask = (closed_mask * 255).astype(np.uint8)\n\nprint(f'After morphological operations: {np.sum(closed_mask > 0)} pixels')\n\n# 4. Object analysis\nprint('\\n4. Plant Object Analysis:')\n\n# Find connected components (individual leaves/objects)\nlabeled_objects, num_objects = ndimage.label(closed_mask > 0)\nprint(f'Number of plant objects detected: {num_objects}')\n\n# Analyze each object\nobject_stats = []\nfor obj_id in range(1, num_objects + 1):\n obj_mask = (labeled_objects == obj_id)\n obj_area = np.sum(obj_mask)\n \n # Find bounding box\n obj_coords = np.where(obj_mask)\n if len(obj_coords[0]) > 0:\n min_y, max_y = np.min(obj_coords[0]), np.max(obj_coords[0])\n min_x, max_x = np.min(obj_coords[1]), np.max(obj_coords[1])\n \n obj_stats.append({\n 'object_id': obj_id,\n 'area': obj_area,\n 'bbox': (min_x, min_y, max_x, max_y),\n 'width': max_x - min_x + 1,\n 'height': max_y - min_y + 1\n })\n\nprint('Object statistics:')\nfor stat in object_stats:\n print(f' Object {stat[\"object_id\"]}: area={stat[\"area\"]} pixels, '\n f'size={stat[\"width\"]}×{stat[\"height\"]}px')\n\n# 5. Phenotypic measurements\nprint('\\n5. Phenotypic Measurements:')\n\n# Calculate total plant area\ntotal_plant_area = np.sum(closed_mask > 0)\nprint(f'Total plant area: {total_plant_area} pixels')\n\n# Calculate convex hull area (approximated)\nfrom scipy.spatial import ConvexHull\n\nplant_coords = np.where(closed_mask > 0)\nif len(plant_coords[0]) > 3:\n points = np.column_stack((plant_coords[1], plant_coords[0]))\n # Sample points to avoid memory issues\n if len(points) > 1000:\n indices = np.random.choice(len(points), 1000, replace=False)\n points = points[indices]\n \n try:\n hull = ConvexHull(points)\n convex_hull_area = hull.volume # In 2D, volume is area\n compactness = total_plant_area / convex_hull_area\n print(f'Convex hull area: {convex_hull_area:.0f} pixels')\n print(f'Compactness ratio: {compactness:.3f}')\n except:\n print('Could not calculate convex hull')\n\n# Color analysis\nprint('\\n6. Color Analysis:')\n\n# Extract color statistics from plant regions\nplant_pixels = img[closed_mask > 0]\nif len(plant_pixels) > 0:\n mean_rgb = np.mean(plant_pixels, axis=0)\n std_rgb = np.std(plant_pixels, axis=0)\n \n print(f'Mean RGB values: R={mean_rgb[0]:.1f}, G={mean_rgb[1]:.1f}, B={mean_rgb[2]:.1f}')\n print(f'RGB standard deviation: R={std_rgb[0]:.1f}, G={std_rgb[1]:.1f}, B={std_rgb[2]:.1f}')\n \n # Calculate greenness index\n greenness = mean_rgb[1] / (mean_rgb[0] + mean_rgb[1] + mean_rgb[2])\n print(f'Greenness index: {greenness:.3f}')\n\n# 7. Shape analysis\nprint('\\n7. Shape Analysis:')\n\n# Calculate aspect ratio and other shape metrics\nif object_stats:\n largest_object = max(object_stats, key=lambda x: x['area'])\n aspect_ratio = largest_object['width'] / largest_object['height']\n print(f'Largest object aspect ratio: {aspect_ratio:.2f}')\n print(f'Largest object dimensions: {largest_object[\"width\"]}×{largest_object[\"height\"]} pixels')\n\n# Create visualization\nprint('\\n8. Visualization:')\n\nfig, axes = plt.subplots(2, 2, figsize=(12, 10))\n\n# Original image\naxes[0, 0].imshow(img)\naxes[0, 0].set_title('Original Image')\naxes[0, 0].axis('off')\n\n# Segmentation mask\naxes[0, 1].imshow(green_mask, cmap='gray')\naxes[0, 1].set_title('Green Segmentation')\naxes[0, 1].axis('off')\n\n# Cleaned mask\naxes[1, 0].imshow(closed_mask, cmap='gray')\naxes[1, 0].set_title('Morphologically Cleaned')\naxes[1, 0].axis('off')\n\n# Labeled objects\naxes[1, 1].imshow(labeled_objects, cmap='tab10')\naxes[1, 1].set_title(f'Detected Objects ({num_objects})')\naxes[1, 1].axis('off')\n\n# Add bounding boxes to original image\nax_bbox = fig.add_subplot(2, 2, 1)\nax_bbox.imshow(img)\nfor stat in object_stats:\n bbox = stat['bbox']\n rect = Rectangle((bbox[0], bbox[1]), stat['width'], stat['height'],\n linewidth=2, edgecolor='red', facecolor='none')\n ax_bbox.add_patch(rect)\n ax_bbox.text(bbox[0], bbox[1]-5, f'Obj{stat[\"object_id\"]}', \n color='red', fontsize=8, weight='bold')\n\nplt.tight_layout()\n\n# Save visualization\nwith tempfile.NamedTemporaryFile(suffix='.png', delete=False) as tmp:\n plt.savefig(tmp.name, dpi=150, bbox_inches='tight')\n viz_file = tmp.name\n\nplt.close()\nprint(f'Analysis visualization saved to: {viz_file}')\n\n# Summary report\nprint('\\n' + '=' * 50)\nprint('PLANT PHENOTYPING SUMMARY REPORT')\nprint('=' * 50)\nprint(f'Image dimensions: {img_width} × {img_height} pixels')\nprint(f'Total plant area: {total_plant_area} pixels ({total_plant_area/(img_width*img_height)*100:.1f}% of image)')\nprint(f'Number of plant objects: {num_objects}')\nif plant_pixels is not None and len(plant_pixels) > 0:\n print(f'Average plant color (RGB): ({mean_rgb[0]:.0f}, {mean_rgb[1]:.0f}, {mean_rgb[2]:.0f})')\n print(f'Greenness index: {greenness:.3f}')\nif object_stats:\n areas = [obj['area'] for obj in object_stats]\n print(f'Object size range: {min(areas)} - {max(areas)} pixels')\n\n# Cleanup\nos.unlink(viz_file)\nprint('\\nDemo complete - temporary files cleaned up')\n\nprint('\\nPlantCV provides:')\nprint('• Automated plant image analysis')\nprint('• Color space transformations')\nprint('• Plant segmentation algorithms')\nprint('• Morphological measurements')\nprint('• Shape and size analysis')\nprint('• Color analysis and health indicators')\nprint('• Multi-plant and time-series analysis')\nprint('• Integration with high-throughput phenotyping')",
317
+ "quick_start": [
318
+ "Install: pip install plantcv",
319
+ "Load image: img = pcv.readimage(filename)",
320
+ "Color conversion: gray_img = pcv.rgb2gray_hsv(img, 's')",
321
+ "Threshold: mask = pcv.threshold.binary(gray_img, 100, 255)",
322
+ "Analyze objects: pcv.analyze_object(img, mask)",
323
+ "Generate report: pcv.print_results(filename)"
324
+ ]
325
+ }
326
+ },
327
+ {
328
+ "type": "PackageTool",
329
+ "name": "get_plotly_info",
330
+ "description": "Get information about the plotly package. Interactive plotting library for Python",
331
+ "package_name": "plotly",
332
+ "parameter": {
333
+ "type": "object",
334
+ "properties": {},
335
+ "required": []
336
+ },
337
+ "required": []
338
+ },
339
+ {
340
+ "type": "PackageTool",
341
+ "name": "get_bokeh_info",
342
+ "description": "Get information about the bokeh package. Interactive visualization library for modern web browsers",
343
+ "package_name": "bokeh",
344
+ "parameter": {
345
+ "type": "object",
346
+ "properties": {},
347
+ "required": []
348
+ },
349
+ "required": []
350
+ },
351
+ {
352
+ "type": "PackageTool",
353
+ "name": "get_altair_info",
354
+ "description": "Get information about the altair package. Declarative statistical visualization library",
355
+ "package_name": "altair",
356
+ "parameter": {
357
+ "type": "object",
358
+ "properties": {},
359
+ "required": []
360
+ },
361
+ "required": []
362
+ },
363
+ {
364
+ "type": "PackageTool",
365
+ "name": "get_holoviews_info",
366
+ "description": "Get information about the holoviews package. Declarative data visualization in Python",
367
+ "package_name": "holoviews",
368
+ "parameter": {
369
+ "type": "object",
370
+ "properties": {},
371
+ "required": []
372
+ },
373
+ "required": []
374
+ },
375
+ {
376
+ "type": "PackageTool",
377
+ "name": "get_datashader_info",
378
+ "description": "Get information about the datashader package. Graphics pipeline system for creating meaningful visualizations of large datasets",
379
+ "package_name": "datashader",
380
+ "parameter": {
381
+ "type": "object",
382
+ "properties": {},
383
+ "required": []
384
+ },
385
+ "required": []
386
+ },
387
+ {
388
+ "type": "PackageTool",
389
+ "name": "get_pyvis_info",
390
+ "description": "Get information about the pyvis package. Python library for visualizing networks",
391
+ "package_name": "pyvis",
392
+ "parameter": {
393
+ "type": "object",
394
+ "properties": {},
395
+ "required": []
396
+ },
397
+ "required": []
398
+ }
399
+ ]
@@ -0,0 +1,215 @@
1
+ [
2
+ {
3
+ "name": "PubChem_get_associated_patents_by_CID",
4
+ "description": "Get a list of patents associated with a specific compound CID.",
5
+ "parameter": {
6
+ "type": "object",
7
+ "properties": {
8
+ "cid": {
9
+ "type": "integer",
10
+ "description": "PubChem compound ID to query, e.g., 2244 (Aspirin)."
11
+ }
12
+ },
13
+ "required": ["cid"]
14
+ },
15
+ "fields": {
16
+ "endpoint": "/data/compound/{cid}/JSON?heading=Patents",
17
+ "return_format": "JSON",
18
+ "use_pugview": true,
19
+ "input_description": "Input is a PubChem compound ID (integer).",
20
+ "output_description": "Returns a JSON object (PUG View) with top-level key \"Record\". Example (abridged):\n{\n \"Record\": {\n \"RecordType\": \"CID\",\n \"RecordNumber\": 2244,\n \"RecordTitle\": \"Aspirin\",\n \"Section\": [\n {\n \"TOCHeading\": \"Patents\",\n \"Description\": \"Patent applications/documents that mention this compound.\",\n \"DisplayControls\": {\"ListType\": \"Columns\"},\n \"Information\": [\n {\n \"ReferenceNumber\": 35,\n \"Value\": {\n \"StringWithMarkup\": [\n {\"String\": \"US5972916\", \"Markup\": [{\"Start\": 0, \"Length\": 9, \"URL\": \"https://pubchem.ncbi.nlm.nih.gov/patent/US5972916\"}]},\n {\"String\": \"US6015577\", \"Markup\": [{\"Start\": 0, \"Length\": 9, \"URL\": \"https://pubchem.ncbi.nlm.nih.gov/patent/US6015577\"}]},\n ... (additional patent IDs)\n ]\n }\n }\n ],\n \"Section\": [\n {\"TOCHeading\": \"Depositor-Supplied Patent Identifiers\", \"Information\": [...]},\n {\"TOCHeading\": \"WIPO PATENTSCOPE\", \"Information\": [...]},\n {\"TOCHeading\": \"FDA Orange Book Patents\", \"Information\": [...]},\n {\"TOCHeading\": \"Chemical Co-Occurrences in Patents\", \"Information\": [...]},\n {\"TOCHeading\": \"Chemical-Disease Co-Occurrences in Patents\", \"Information\": [...]},\n {\"TOCHeading\": \"Chemical-Gene Co-Occurrences in Patents\", \"Information\": [...]},\n {\"TOCHeading\": \"Chemical-Organism Co-Occurrences in Patents\", \"Information\": [...]}\n ]\n }\n ],\n \"Reference\": [ {\"ReferenceNumber\": 35, \"SourceName\": \"DrugBank\", ...}, ... ]\n }\n}\nKey points:\n- Record.Section[0] (TOCHeading \"Patents\") holds patent ID list in Information[0].Value.StringWithMarkup (each element has String patent identifier and Markup[0].URL link).\n- Nested Section array contains related subsections (e.g., WIPO, FDA Orange Book, co-occurrence panels) each with its own Information entries.\n- Co-occurrence panels often provide structured headers or external table references (e.g., ExternalTableName or StringWithMarkup rows) for downstream follow-up queries.\n- Reference array cites data sources (DrugBank, FDA, PubChem, WIPO, etc.).\nLLM can extract patent identifiers by iterating Record.Section[0].Information[0].Value.StringWithMarkup[*].String and their URLs from Markup[*].URL.",
21
+ "property_list": []
22
+ },
23
+ "type": "PubChemRESTTool"
24
+ },
25
+ {
26
+ "name": "PubChem_get_compound_properties_by_CID",
27
+ "description": "Get a set of specified molecular properties through CID (Compound ID), such as molecular weight, IUPAC name, Canonical SMILES.",
28
+ "parameter": {
29
+ "type": "object",
30
+ "properties": {
31
+ "cid": {
32
+ "type": "integer",
33
+ "description": "PubChem compound ID to query, e.g., 2244 (Aspirin)."
34
+ }
35
+ },
36
+ "required": ["cid"]
37
+ },
38
+ "fields": {
39
+ "endpoint": "/compound/cid/{cid}/property/{property_list}/JSON",
40
+ "use_pugview": false,
41
+ "input_description": "Input is a PubChem compound ID (integer).",
42
+ "output_description": "Returns a JSON object with structure example:\n{\n \"PropertyTable\": {\n \"Properties\": [\n {\n \"CID\": 2244,\n \"MolecularWeight\": 180.157,\n \"IUPACName\": \"2-acetyloxybenzoic acid\",\n \"CanonicalSMILES\": \"CC(=O)OC1=CC=CC=C1C(=O)O\",\n ...\n }\n ]\n }\n}\n\nWhere:\n- PropertyTable.Properties list: each element contains properties for that CID;\n- Property names determined by {property_list}, example here is [\"MolecularWeight\",\"IUPACName\",\"CanonicalSMILES\"].\nAfter calling, LLM can directly access these important molecular properties for subsequent chemical/pharmacological reasoning.",
43
+ "property_list": ["MolecularWeight", "IUPACName", "CanonicalSMILES"]
44
+ },
45
+ "type": "PubChemRESTTool"
46
+ },
47
+ {
48
+ "name": "PubChem_get_CID_by_compound_name",
49
+ "description": "Retrieve corresponding CID list (IdentifierList) by chemical name.",
50
+ "parameter": {
51
+ "type": "object",
52
+ "properties": {
53
+ "name": {
54
+ "type": "string",
55
+ "description": "Chemical name (e.g., \"Aspirin\" or IUPAC name)."
56
+ }
57
+ },
58
+ "required": ["name"]
59
+ },
60
+ "fields": {
61
+ "endpoint": "/compound/name/{name}/cids/JSON",
62
+ "use_pugview": false,
63
+ "input_description": "Input is a chemical name string (case and space sensitive), PubChem will perform fuzzy matching automatically.",
64
+ "output_description": "Returns a JSON object with structure example:\n{\n \"IdentifierList\": {\n \"CID\": [2244, 11394, ...]\n }\n}\n\nWhere:\n- IdentifierList.CID list: all CIDs matching the name. Usually the first one is the most common compound ID.\nAfter calling, LLM can obtain the PubChem ID list corresponding to the input chemical name, for further property or structure queries by CID.",
65
+ "property_list": []
66
+ },
67
+ "type": "PubChemRESTTool"
68
+ },
69
+ {
70
+ "name": "PubChem_get_CID_by_SMILES",
71
+ "description": "Retrieve corresponding CID list by SMILES string.",
72
+ "parameter": {
73
+ "type": "object",
74
+ "properties": {
75
+ "smiles": {
76
+ "type": "string",
77
+ "description": "SMILES expression (e.g., \"CC(=O)OC1=CC=CC=C1C(=O)O\" corresponds to aspirin)."
78
+ }
79
+ },
80
+ "required": ["smiles"]
81
+ },
82
+ "fields": {
83
+ "endpoint": "/compound/smiles/{smiles}/cids/JSON",
84
+ "use_pugview": false,
85
+ "input_description": "Input is a valid SMILES string (need to ensure beforehand that this SMILES has corresponding records in PubChem database).",
86
+ "output_description": "Returns a JSON object with structure example:\n{\n \"IdentifierList\": {\n \"CID\": [2244]\n }\n}\n\nWhere: CID array contains all compound IDs that exactly match this SMILES. LLM can use this tool to map structure to CID.",
87
+ "property_list": []
88
+ },
89
+ "type": "PubChemRESTTool"
90
+ },
91
+ {
92
+ "name": "PubChem_search_compounds_by_substructure",
93
+ "description": "Search for all CIDs in PubChem that contain the given substructure (SMILES).",
94
+ "parameter": {
95
+ "type": "object",
96
+ "properties": {
97
+ "smiles": {
98
+ "type": "string",
99
+ "description": "SMILES of substructure (e.g., \"c1ccccc1\" corresponds to benzene ring)."
100
+ }
101
+ },
102
+ "required": ["smiles"]
103
+ },
104
+ "fields": {
105
+ "endpoint": "/compound/fastsubstructure/smiles/{smiles}/cids/JSON",
106
+ "use_pugview": false,
107
+ "input_description": "Input is SMILES of target substructure, PubChem will find all compounds containing this substructure, returns no more than 10 CIDs (MaxRecords=10)",
108
+ "output_description": "Returns a JSON object with structure example:\n{\n \"IdentifierList\": {\n \"CID\": [241, 1188, ...]\n }\n}\n\nWhere: CID array contains all compound IDs in PubChem database that contain this substructure. LLM can use this to understand which molecules contain this group.",
109
+ "property_list": []
110
+ },
111
+ "type": "PubChemRESTTool"
112
+ },
113
+ {
114
+ "name": "PubChem_search_compounds_by_similarity",
115
+ "description": "Search by similarity (Tanimoto coefficient), returns CID list of compounds with similarity above threshold to given SMILES molecule, returns no more than 10 CIDs (MaxRecords=10)",
116
+ "parameter": {
117
+ "type": "object",
118
+ "properties": {
119
+ "smiles": {
120
+ "type": "string",
121
+ "description": "SMILES expression of target molecule."
122
+ },
123
+ "threshold": {
124
+ "type": "number",
125
+ "description": "Similarity threshold (between 0 and 1), e.g., 0.9 means 90% similarity.",
126
+ "default": 0.9
127
+ }
128
+ },
129
+ "required": ["smiles"]
130
+ },
131
+ "fields": {
132
+ "endpoint": "/compound/fastsimilarity_2d/smiles/{smiles}/cids/JSON",
133
+ "use_pugview": false,
134
+ "input_description": "Input is:\n- smiles: SMILES for similarity comparison;\n- threshold: specify similarity threshold, PubChem will return all CIDs with similarity ≥ threshold.",
135
+ "output_description": "Returns a JSON object with structure example:\n{\n \"IdentifierList\": {\n \"CID\": [2244, 2245, ...]\n }\n}\n\nWhere: CID array contains compound IDs with similarity above specified threshold to target molecule. LLM can use this for chemical similarity analysis.",
136
+ "property_list": []
137
+ },
138
+ "type": "PubChemRESTTool"
139
+ },
140
+ {
141
+ "name": "PubChem_get_compound_2D_image_by_CID",
142
+ "description": "Get 2D structure image (PNG format) of compound by CID.",
143
+ "parameter": {
144
+ "type": "object",
145
+ "properties": {
146
+ "cid": {
147
+ "type": "integer",
148
+ "description": "Compound ID to get image for, e.g., 2244."
149
+ },
150
+ "image_size": {
151
+ "type": "string",
152
+ "description": "Optional parameter, image size, like \"200x200\" (default).",
153
+ "default": "200x200"
154
+ }
155
+ },
156
+ "required": ["cid"]
157
+ },
158
+ "fields": {
159
+ "endpoint": "/compound/cid/{cid}/PNG?image_size={image_size}",
160
+ "use_pugview": false,
161
+ "input_description": "Input is:\n- cid: compound ID;\n- image_size: desired image pixel size, format is \"widthxheight\" (e.g., \"150x150\").",
162
+ "output_description": "Returns binary PNG image data, conforming to PNG file header format. LLM can save this binary as image file, or provide to downstream visualization."
163
+ },
164
+ "type": "PubChemRESTTool"
165
+ },
166
+ {
167
+ "name": "PubChem_get_compound_synonyms_by_CID",
168
+ "description": "Get complete list of synonyms for compound by CID.",
169
+ "parameter": {
170
+ "type": "object",
171
+ "properties": {
172
+ "cid": {
173
+ "type": "integer",
174
+ "description": "Compound ID to query synonyms for, e.g., 2244."
175
+ }
176
+ },
177
+ "required": ["cid"]
178
+ },
179
+ "fields": {
180
+ "endpoint": "/compound/cid/{cid}/synonyms/JSON",
181
+ "use_pugview": false,
182
+ "input_description": "Input is compound ID (cid), PubChem will return all synonyms recorded in database for this compound.",
183
+ "output_description": "Returns a JSON object with structure example:\n{\n \"InformationList\": {\n \"Information\": [\n {\n \"CID\": 2244,\n \"Synonym\": [\"Aspirin\", \"Acetylsalicylic acid\", ...]\n }\n ]\n }\n}\n\nWhere: InformationList.Information[0].Synonym is a string list containing all synonyms. LLM can use this to identify various chemical nomenclature."
184
+ },
185
+ "type": "PubChemRESTTool"
186
+ },
187
+ {
188
+ "name": "PubChem_get_compound_xrefs_by_CID",
189
+ "description": "Get external references (XRefs) for compound by CID, including links to ChEBI, DrugBank, KEGG, etc.",
190
+ "parameter": {
191
+ "type": "object",
192
+ "properties": {
193
+ "cid": {
194
+ "type": "integer",
195
+ "description": "Compound ID to query external references for, e.g., 2244."
196
+ },
197
+ "xref_types": {
198
+ "type": "array",
199
+ "description": "List of external database types to query, e.g., [\"RegistryID\", \"RN\", \"PubMedID\"].",
200
+ "items": {
201
+ "type": "string"
202
+ }
203
+ }
204
+ },
205
+ "required": ["cid", "xref_types"]
206
+ },
207
+ "fields": {
208
+ "endpoint": "/compound/cid/{cid}/xrefs/{xref_types}/JSON",
209
+ "use_pugview": false,
210
+ "input_description": "Input is:\n- cid: compound ID;\n- xref_types: list of external database types to query.",
211
+ "output_description": "Returns a JSON object with structure example:\n{\n \"InformationList\": {\n \"Information\": [\n {\n \"CID\": 2244,\n \"XRef\": {\n \"ChEBI\": \"CHEBI:15365\",\n \"DrugBank\": \"DB00945\",\n \"KEGG\": \"D00134\",\n ...\n }\n }\n ]\n }\n}\n\nWhere: In XRef dictionary, keys are external resource names, values are corresponding resource IDs. LLM can use this for cross-database linking and knowledge integration."
212
+ },
213
+ "type": "PubChemRESTTool"
214
+ }
215
+ ]