czty commited on
Commit
0d8232c
·
verified ·
1 Parent(s): b7da0d4

Add files using upload-large-folder tool

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.json +1775 -0
  2. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.shard_0_of_4.json +0 -0
  3. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.shard_1_of_4.json +0 -0
  4. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.shard_2_of_4.json +0 -0
  5. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.shard_3_of_4.json +0 -0
  6. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/Dockerfile +40 -0
  7. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/app/abundancebin_server.py +134 -0
  8. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/app/abundancebin_shim_server.py +45 -0
  9. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/app/requirements.txt +1 -0
  10. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/docker-compose.yml +22 -0
  11. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/environment.yaml +10 -0
  12. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/requirements.txt +2 -0
  13. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anarci/app/anarci_server.py +183 -0
  14. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anarci/app/anarci_shim_server.py +45 -0
  15. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anarci/docker-compose.yml +22 -0
  16. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anarci/environment.yaml +10 -0
  17. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/Dockerfile +40 -0
  18. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/app/requirements.txt +1 -0
  19. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/docker-compose.yml +22 -0
  20. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/environment.yaml +10 -0
  21. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/requirements.txt +2 -0
  22. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/Dockerfile +40 -0
  23. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/app/bioconductor-alabaster.spatial_server.py +289 -0
  24. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/app/bioconductor-alabaster.spatial_shim_server.py +45 -0
  25. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/docker-compose.yml +22 -0
  26. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/environment.yaml +10 -0
  27. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/requirements.txt +2 -0
  28. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-annotationhub/requirements.txt +2 -0
  29. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/Dockerfile +40 -0
  30. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/app/bioconductor-awaggregator_server.py +214 -0
  31. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/app/bioconductor-awaggregator_shim_server.py +45 -0
  32. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/app/requirements.txt +1 -0
  33. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/docker-compose.yml +22 -0
  34. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/environment.yaml +10 -0
  35. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/requirements.txt +2 -0
  36. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-bsgenome/app/bioconductor-bsgenome_server.py +270 -0
  37. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-bsgenome/app/bioconductor-bsgenome_shim_server.py +45 -0
  38. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/Dockerfile +40 -0
  39. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/app/bioconductor-cardspa_server.py +181 -0
  40. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/app/bioconductor-cardspa_shim_server.py +45 -0
  41. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/app/requirements.txt +1 -0
  42. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/docker-compose.yml +22 -0
  43. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/environment.yaml +10 -0
  44. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/requirements.txt +2 -0
  45. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/Dockerfile +40 -0
  46. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/app/bioconductor-cellid_server.py +280 -0
  47. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/app/bioconductor-cellid_shim_server.py +45 -0
  48. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/docker-compose.yml +22 -0
  49. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/environment.yaml +10 -0
  50. BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/requirements.txt +2 -0
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.json ADDED
@@ -0,0 +1,1775 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "tool_name": "anansescanpy",
4
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/anansescanpy.manual_bundle.txt",
5
+ "run_help_command": false,
6
+ "status": "skipped_existing",
7
+ "error": "",
8
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anansescanpy/app/anansescanpy_server.py",
9
+ "dockerfile_ready": true
10
+ },
11
+ {
12
+ "tool_name": "aria2",
13
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/aria2.manual_bundle.txt",
14
+ "run_help_command": false,
15
+ "status": "skipped_existing",
16
+ "error": "",
17
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_aria2/app/aria2_server.py",
18
+ "dockerfile_ready": true
19
+ },
20
+ {
21
+ "tool_name": "bcbio-nextgen",
22
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bcbio-nextgen.manual_bundle.txt",
23
+ "run_help_command": false,
24
+ "status": "skipped_existing",
25
+ "error": "",
26
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bcbio-nextgen/app/bcbio-nextgen_server.py",
27
+ "dockerfile_ready": true
28
+ },
29
+ {
30
+ "tool_name": "bin2cell",
31
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bin2cell.manual_bundle.txt",
32
+ "run_help_command": false,
33
+ "status": "success",
34
+ "error": "",
35
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bin2cell/app/bin2cell_server.py",
36
+ "dockerfile_ready": true
37
+ },
38
+ {
39
+ "tool_name": "bioconda-repodata-patches",
40
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconda-repodata-patches.manual_bundle.txt",
41
+ "run_help_command": false,
42
+ "status": "skipped_existing",
43
+ "error": "",
44
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconda-repodata-patches/app/bioconda-repodata-patches_server.py",
45
+ "dockerfile_ready": true
46
+ },
47
+ {
48
+ "tool_name": "bioconductor-alabaster",
49
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-alabaster.manual_bundle.txt",
50
+ "run_help_command": false,
51
+ "status": "success",
52
+ "error": "",
53
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster/app/bioconductor-alabaster_server.py",
54
+ "dockerfile_ready": true
55
+ },
56
+ {
57
+ "tool_name": "bioconductor-alabaster.sfe",
58
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-alabaster.sfe.manual_bundle.txt",
59
+ "run_help_command": false,
60
+ "status": "success",
61
+ "error": "",
62
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.sfe/app/bioconductor-alabaster.sfe_server.py",
63
+ "dockerfile_ready": true
64
+ },
65
+ {
66
+ "tool_name": "bioconductor-alabaster.spatial",
67
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-alabaster.spatial.manual_bundle.txt",
68
+ "run_help_command": false,
69
+ "status": "skipped_existing",
70
+ "error": "",
71
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/app/bioconductor-alabaster.spatial_server.py",
72
+ "dockerfile_ready": true
73
+ },
74
+ {
75
+ "tool_name": "bioconductor-apl",
76
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-apl.manual_bundle.txt",
77
+ "run_help_command": false,
78
+ "status": "success",
79
+ "error": "",
80
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-apl/app/bioconductor-apl_server.py",
81
+ "dockerfile_ready": true
82
+ },
83
+ {
84
+ "tool_name": "bioconductor-benchdamic",
85
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-benchdamic.manual_bundle.txt",
86
+ "run_help_command": false,
87
+ "status": "skipped_existing",
88
+ "error": "",
89
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-benchdamic/app/bioconductor-benchdamic_server.py",
90
+ "dockerfile_ready": true
91
+ },
92
+ {
93
+ "tool_name": "bioconductor-blase",
94
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-blase.manual_bundle.txt",
95
+ "run_help_command": false,
96
+ "status": "success",
97
+ "error": "",
98
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-blase/app/bioconductor-blase_server.py",
99
+ "dockerfile_ready": true
100
+ },
101
+ {
102
+ "tool_name": "bioconductor-bulksignalr",
103
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-bulksignalr.manual_bundle.txt",
104
+ "run_help_command": false,
105
+ "status": "success",
106
+ "error": "",
107
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-bulksignalr/app/bioconductor-bulksignalr_server.py",
108
+ "dockerfile_ready": true
109
+ },
110
+ {
111
+ "tool_name": "bioconductor-cardspa",
112
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-cardspa.manual_bundle.txt",
113
+ "run_help_command": false,
114
+ "status": "success",
115
+ "error": "",
116
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/app/bioconductor-cardspa_server.py",
117
+ "dockerfile_ready": true
118
+ },
119
+ {
120
+ "tool_name": "bioconductor-catscradle",
121
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-catscradle.manual_bundle.txt",
122
+ "run_help_command": false,
123
+ "status": "failed",
124
+ "error": "refine failed (retry=1): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
125
+ "output_file": "",
126
+ "dockerfile_ready": false
127
+ },
128
+ {
129
+ "tool_name": "bioconductor-cdi",
130
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-cdi.manual_bundle.txt",
131
+ "run_help_command": false,
132
+ "status": "success",
133
+ "error": "",
134
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cdi/app/bioconductor-cdi_server.py",
135
+ "dockerfile_ready": true
136
+ },
137
+ {
138
+ "tool_name": "bioconductor-cellhashr",
139
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-cellhashr.manual_bundle.txt",
140
+ "run_help_command": false,
141
+ "status": "success",
142
+ "error": "",
143
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellhashr/app/bioconductor-cellhashr_server.py",
144
+ "dockerfile_ready": true
145
+ },
146
+ {
147
+ "tool_name": "bioconductor-cellid",
148
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-cellid.manual_bundle.txt",
149
+ "run_help_command": false,
150
+ "status": "skipped_existing",
151
+ "error": "",
152
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/app/bioconductor-cellid_server.py",
153
+ "dockerfile_ready": true
154
+ },
155
+ {
156
+ "tool_name": "bioconductor-cellmigration",
157
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-cellmigration.manual_bundle.txt",
158
+ "run_help_command": false,
159
+ "status": "success",
160
+ "error": "",
161
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellmigration/app/bioconductor-cellmigration_server.py",
162
+ "dockerfile_ready": true
163
+ },
164
+ {
165
+ "tool_name": "bioconductor-clusterfoldsimilarity",
166
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-clusterfoldsimilarity.manual_bundle.txt",
167
+ "run_help_command": false,
168
+ "status": "failed",
169
+ "error": "refine failed (retry=1): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
170
+ "output_file": "",
171
+ "dockerfile_ready": false
172
+ },
173
+ {
174
+ "tool_name": "bioconductor-concordexr",
175
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-concordexr.manual_bundle.txt",
176
+ "run_help_command": false,
177
+ "status": "success",
178
+ "error": "",
179
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-concordexr/app/bioconductor-concordexr_server.py",
180
+ "dockerfile_ready": true
181
+ },
182
+ {
183
+ "tool_name": "bioconductor-cotan",
184
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-cotan.manual_bundle.txt",
185
+ "run_help_command": false,
186
+ "status": "skipped_existing",
187
+ "error": "",
188
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cotan/app/bioconductor-cotan_server.py",
189
+ "dockerfile_ready": true
190
+ },
191
+ {
192
+ "tool_name": "bioconductor-csoa",
193
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-csoa.manual_bundle.txt",
194
+ "run_help_command": false,
195
+ "status": "success",
196
+ "error": "",
197
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-csoa/app/bioconductor-csoa_server.py",
198
+ "dockerfile_ready": true
199
+ },
200
+ {
201
+ "tool_name": "bioconductor-ctsv",
202
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-ctsv.manual_bundle.txt",
203
+ "run_help_command": false,
204
+ "status": "success",
205
+ "error": "",
206
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-ctsv/app/bioconductor-ctsv_server.py",
207
+ "dockerfile_ready": true
208
+ },
209
+ {
210
+ "tool_name": "bioconductor-curatedatlasqueryr",
211
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-curatedatlasqueryr.manual_bundle.txt",
212
+ "run_help_command": false,
213
+ "status": "success",
214
+ "error": "",
215
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-curatedatlasqueryr/app/bioconductor-curatedatlasqueryr_server.py",
216
+ "dockerfile_ready": true
217
+ },
218
+ {
219
+ "tool_name": "bioconductor-decontx",
220
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-decontx.manual_bundle.txt",
221
+ "run_help_command": false,
222
+ "status": "skipped_existing",
223
+ "error": "",
224
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-decontx/app/bioconductor-decontx_server.py",
225
+ "dockerfile_ready": true
226
+ },
227
+ {
228
+ "tool_name": "bioconductor-deconvobuddies",
229
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-deconvobuddies.manual_bundle.txt",
230
+ "run_help_command": false,
231
+ "status": "success",
232
+ "error": "",
233
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-deconvobuddies/app/bioconductor-deconvobuddies_server.py",
234
+ "dockerfile_ready": true
235
+ },
236
+ {
237
+ "tool_name": "bioconductor-despace",
238
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-despace.manual_bundle.txt",
239
+ "run_help_command": false,
240
+ "status": "success",
241
+ "error": "",
242
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-despace/app/bioconductor-despace_server.py",
243
+ "dockerfile_ready": true
244
+ },
245
+ {
246
+ "tool_name": "bioconductor-dino",
247
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-dino.manual_bundle.txt",
248
+ "run_help_command": false,
249
+ "status": "skipped_existing",
250
+ "error": "",
251
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-dino/app/bioconductor-dino_server.py",
252
+ "dockerfile_ready": true
253
+ },
254
+ {
255
+ "tool_name": "bioconductor-escher",
256
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-escher.manual_bundle.txt",
257
+ "run_help_command": false,
258
+ "status": "success",
259
+ "error": "",
260
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-escher/app/bioconductor-escher_server.py",
261
+ "dockerfile_ready": true
262
+ },
263
+ {
264
+ "tool_name": "bioconductor-experimentsubset",
265
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-experimentsubset.manual_bundle.txt",
266
+ "run_help_command": false,
267
+ "status": "success",
268
+ "error": "",
269
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-experimentsubset/app/bioconductor-experimentsubset_server.py",
270
+ "dockerfile_ready": true
271
+ },
272
+ {
273
+ "tool_name": "bioconductor-geomxtools",
274
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-geomxtools.manual_bundle.txt",
275
+ "run_help_command": false,
276
+ "status": "skipped_existing",
277
+ "error": "",
278
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-geomxtools/app/bioconductor-geomxtools_server.py",
279
+ "dockerfile_ready": true
280
+ },
281
+ {
282
+ "tool_name": "bioconductor-ggsc",
283
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-ggsc.manual_bundle.txt",
284
+ "run_help_command": false,
285
+ "status": "skipped_existing",
286
+ "error": "",
287
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-ggsc/app/bioconductor-ggsc_server.py",
288
+ "dockerfile_ready": true
289
+ },
290
+ {
291
+ "tool_name": "bioconductor-ggspavis",
292
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-ggspavis.manual_bundle.txt",
293
+ "run_help_command": false,
294
+ "status": "success",
295
+ "error": "",
296
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-ggspavis/app/bioconductor-ggspavis_server.py",
297
+ "dockerfile_ready": true
298
+ },
299
+ {
300
+ "tool_name": "bioconductor-hcatonsildata",
301
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-hcatonsildata.manual_bundle.txt",
302
+ "run_help_command": false,
303
+ "status": "success",
304
+ "error": "",
305
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-hcatonsildata/app/bioconductor-hcatonsildata_server.py",
306
+ "dockerfile_ready": true
307
+ },
308
+ {
309
+ "tool_name": "bioconductor-hoodscanr",
310
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-hoodscanr.manual_bundle.txt",
311
+ "run_help_command": false,
312
+ "status": "failed",
313
+ "error": "autogenerate_mcp_tool failed: Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
314
+ "output_file": "",
315
+ "dockerfile_ready": false
316
+ },
317
+ {
318
+ "tool_name": "bioconductor-imcdatasets",
319
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-imcdatasets.manual_bundle.txt",
320
+ "run_help_command": false,
321
+ "status": "success",
322
+ "error": "",
323
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-imcdatasets/app/bioconductor-imcdatasets_server.py",
324
+ "dockerfile_ready": true
325
+ },
326
+ {
327
+ "tool_name": "bioconductor-imcrtools",
328
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-imcrtools.manual_bundle.txt",
329
+ "run_help_command": false,
330
+ "status": "success",
331
+ "error": "",
332
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-imcrtools/app/bioconductor-imcrtools_server.py",
333
+ "dockerfile_ready": true
334
+ },
335
+ {
336
+ "tool_name": "bioconductor-irisfgm",
337
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-irisfgm.manual_bundle.txt",
338
+ "run_help_command": false,
339
+ "status": "skipped_existing",
340
+ "error": "",
341
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-irisfgm/app/bioconductor-irisfgm_server.py",
342
+ "dockerfile_ready": true
343
+ },
344
+ {
345
+ "tool_name": "bioconductor-lisaclust",
346
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-lisaclust.manual_bundle.txt",
347
+ "run_help_command": false,
348
+ "status": "success",
349
+ "error": "",
350
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-lisaclust/app/bioconductor-lisaclust_server.py",
351
+ "dockerfile_ready": true
352
+ },
353
+ {
354
+ "tool_name": "bioconductor-mastr",
355
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-mastr.manual_bundle.txt",
356
+ "run_help_command": false,
357
+ "status": "success",
358
+ "error": "",
359
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-mastr/app/bioconductor-mastr_server.py",
360
+ "dockerfile_ready": true
361
+ },
362
+ {
363
+ "tool_name": "bioconductor-merfishdata",
364
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-merfishdata.manual_bundle.txt",
365
+ "run_help_command": false,
366
+ "status": "success",
367
+ "error": "",
368
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-merfishdata/app/bioconductor-merfishdata_server.py",
369
+ "dockerfile_ready": true
370
+ },
371
+ {
372
+ "tool_name": "bioconductor-moleculeexperiment",
373
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-moleculeexperiment.manual_bundle.txt",
374
+ "run_help_command": false,
375
+ "status": "success",
376
+ "error": "",
377
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-moleculeexperiment/app/bioconductor-moleculeexperiment_server.py",
378
+ "dockerfile_ready": true
379
+ },
380
+ {
381
+ "tool_name": "bioconductor-mousegastrulationdata",
382
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-mousegastrulationdata.manual_bundle.txt",
383
+ "run_help_command": false,
384
+ "status": "success",
385
+ "error": "",
386
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-mousegastrulationdata/app/bioconductor-mousegastrulationdata_server.py",
387
+ "dockerfile_ready": true
388
+ },
389
+ {
390
+ "tool_name": "bioconductor-nnsvg",
391
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-nnsvg.manual_bundle.txt",
392
+ "run_help_command": false,
393
+ "status": "success",
394
+ "error": "",
395
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-nnsvg/app/bioconductor-nnsvg_server.py",
396
+ "dockerfile_ready": true
397
+ },
398
+ {
399
+ "tool_name": "bioconductor-partcnv",
400
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-partcnv.manual_bundle.txt",
401
+ "run_help_command": false,
402
+ "status": "success",
403
+ "error": "",
404
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-partcnv/app/bioconductor-partcnv_server.py",
405
+ "dockerfile_ready": true
406
+ },
407
+ {
408
+ "tool_name": "bioconductor-pipecomp",
409
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-pipecomp.manual_bundle.txt",
410
+ "run_help_command": false,
411
+ "status": "success",
412
+ "error": "",
413
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-pipecomp/app/bioconductor-pipecomp_server.py",
414
+ "dockerfile_ready": true
415
+ },
416
+ {
417
+ "tool_name": "bioconductor-reactomegsa.data",
418
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-reactomegsa.data.manual_bundle.txt",
419
+ "run_help_command": false,
420
+ "status": "skipped_existing",
421
+ "error": "",
422
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-reactomegsa.data/app/bioconductor-reactomegsa.data_server.py",
423
+ "dockerfile_ready": true
424
+ },
425
+ {
426
+ "tool_name": "bioconductor-regionalst",
427
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-regionalst.manual_bundle.txt",
428
+ "run_help_command": false,
429
+ "status": "skipped_existing",
430
+ "error": "",
431
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-regionalst/app/bioconductor-regionalst_server.py",
432
+ "dockerfile_ready": true
433
+ },
434
+ {
435
+ "tool_name": "bioconductor-scalign",
436
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scalign.manual_bundle.txt",
437
+ "run_help_command": false,
438
+ "status": "skipped_existing",
439
+ "error": "",
440
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scalign/app/bioconductor-scalign_server.py",
441
+ "dockerfile_ready": true
442
+ },
443
+ {
444
+ "tool_name": "bioconductor-scannotatr",
445
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scannotatr.manual_bundle.txt",
446
+ "run_help_command": false,
447
+ "status": "skipped_existing",
448
+ "error": "",
449
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scannotatr/app/bioconductor-scannotatr_server.py",
450
+ "dockerfile_ready": true
451
+ },
452
+ {
453
+ "tool_name": "bioconductor-scarray.sat",
454
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scarray.sat.manual_bundle.txt",
455
+ "run_help_command": false,
456
+ "status": "skipped_existing",
457
+ "error": "",
458
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scarray.sat/app/bioconductor-scarray.sat_server.py",
459
+ "dockerfile_ready": true
460
+ },
461
+ {
462
+ "tool_name": "bioconductor-scbubbletree",
463
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scbubbletree.manual_bundle.txt",
464
+ "run_help_command": false,
465
+ "status": "skipped_existing",
466
+ "error": "",
467
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scbubbletree/app/bioconductor-scbubbletree_server.py",
468
+ "dockerfile_ready": true
469
+ },
470
+ {
471
+ "tool_name": "bioconductor-scclassifr",
472
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scclassifr.manual_bundle.txt",
473
+ "run_help_command": false,
474
+ "status": "skipped_existing",
475
+ "error": "",
476
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scclassifr/app/bioconductor-scclassifr_server.py",
477
+ "dockerfile_ready": true
478
+ },
479
+ {
480
+ "tool_name": "bioconductor-scdotplot",
481
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scdotplot.manual_bundle.txt",
482
+ "run_help_command": false,
483
+ "status": "success",
484
+ "error": "",
485
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scdotplot/app/bioconductor-scdotplot_server.py",
486
+ "dockerfile_ready": true
487
+ },
488
+ {
489
+ "tool_name": "bioconductor-scfeatures",
490
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scfeatures.manual_bundle.txt",
491
+ "run_help_command": false,
492
+ "status": "success",
493
+ "error": "",
494
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scfeatures/app/bioconductor-scfeatures_server.py",
495
+ "dockerfile_ready": true
496
+ },
497
+ {
498
+ "tool_name": "bioconductor-scider",
499
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scider.manual_bundle.txt",
500
+ "run_help_command": false,
501
+ "status": "success",
502
+ "error": "",
503
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scider/app/bioconductor-scider_server.py",
504
+ "dockerfile_ready": true
505
+ },
506
+ {
507
+ "tool_name": "bioconductor-scqtltools",
508
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scqtltools.manual_bundle.txt",
509
+ "run_help_command": false,
510
+ "status": "success",
511
+ "error": "",
512
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scqtltools/app/bioconductor-scqtltools_server.py",
513
+ "dockerfile_ready": true
514
+ },
515
+ {
516
+ "tool_name": "bioconductor-scrnaseqapp",
517
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scrnaseqapp.manual_bundle.txt",
518
+ "run_help_command": false,
519
+ "status": "success",
520
+ "error": "",
521
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scrnaseqapp/app/bioconductor-scrnaseqapp_server.py",
522
+ "dockerfile_ready": true
523
+ },
524
+ {
525
+ "tool_name": "bioconductor-sctreeviz",
526
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-sctreeviz.manual_bundle.txt",
527
+ "run_help_command": false,
528
+ "status": "success",
529
+ "error": "",
530
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-sctreeviz/app/bioconductor-sctreeviz_server.py",
531
+ "dockerfile_ready": true
532
+ },
533
+ {
534
+ "tool_name": "bioconductor-scvir",
535
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-scvir.manual_bundle.txt",
536
+ "run_help_command": false,
537
+ "status": "success",
538
+ "error": "",
539
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-scvir/app/bioconductor-scvir_server.py",
540
+ "dockerfile_ready": true
541
+ },
542
+ {
543
+ "tool_name": "bioconductor-seraster",
544
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-seraster.manual_bundle.txt",
545
+ "run_help_command": false,
546
+ "status": "success",
547
+ "error": "",
548
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-seraster/app/bioconductor-seraster_server.py",
549
+ "dockerfile_ready": true
550
+ },
551
+ {
552
+ "tool_name": "bioconductor-signifinder",
553
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-signifinder.manual_bundle.txt",
554
+ "run_help_command": false,
555
+ "status": "success",
556
+ "error": "",
557
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-signifinder/app/bioconductor-signifinder_server.py",
558
+ "dockerfile_ready": true
559
+ },
560
+ {
561
+ "tool_name": "bioconductor-singlecelltk",
562
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-singlecelltk.manual_bundle.txt",
563
+ "run_help_command": false,
564
+ "status": "failed",
565
+ "error": "autogenerate_mcp_tool failed: Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
566
+ "output_file": "",
567
+ "dockerfile_ready": false
568
+ },
569
+ {
570
+ "tool_name": "bioconductor-smoppix",
571
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-smoppix.manual_bundle.txt",
572
+ "run_help_command": false,
573
+ "status": "success",
574
+ "error": "",
575
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-smoppix/app/bioconductor-smoppix_server.py",
576
+ "dockerfile_ready": true
577
+ },
578
+ {
579
+ "tool_name": "bioconductor-sosta",
580
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-sosta.manual_bundle.txt",
581
+ "run_help_command": false,
582
+ "status": "failed",
583
+ "error": "refine failed (retry=1): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
584
+ "output_file": "",
585
+ "dockerfile_ready": false
586
+ },
587
+ {
588
+ "tool_name": "bioconductor-spacetrooper",
589
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spacetrooper.manual_bundle.txt",
590
+ "run_help_command": false,
591
+ "status": "success",
592
+ "error": "",
593
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spacetrooper/app/bioconductor-spacetrooper_server.py",
594
+ "dockerfile_ready": true
595
+ },
596
+ {
597
+ "tool_name": "bioconductor-spanorm",
598
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spanorm.manual_bundle.txt",
599
+ "run_help_command": false,
600
+ "status": "success",
601
+ "error": "",
602
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spanorm/app/bioconductor-spanorm_server.py",
603
+ "dockerfile_ready": true
604
+ },
605
+ {
606
+ "tool_name": "bioconductor-spari",
607
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spari.manual_bundle.txt",
608
+ "run_help_command": false,
609
+ "status": "success",
610
+ "error": "",
611
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spari/app/bioconductor-spari_server.py",
612
+ "dockerfile_ready": true
613
+ },
614
+ {
615
+ "tool_name": "bioconductor-spasim",
616
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spasim.manual_bundle.txt",
617
+ "run_help_command": false,
618
+ "status": "success",
619
+ "error": "",
620
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spasim/app/bioconductor-spasim_server.py",
621
+ "dockerfile_ready": true
622
+ },
623
+ {
624
+ "tool_name": "bioconductor-spatialdatasets",
625
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spatialdatasets.manual_bundle.txt",
626
+ "run_help_command": false,
627
+ "status": "success",
628
+ "error": "",
629
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spatialdatasets/app/bioconductor-spatialdatasets_server.py",
630
+ "dockerfile_ready": true
631
+ },
632
+ {
633
+ "tool_name": "bioconductor-spatialde",
634
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spatialde.manual_bundle.txt",
635
+ "run_help_command": false,
636
+ "status": "success",
637
+ "error": "",
638
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spatialde/app/bioconductor-spatialde_server.py",
639
+ "dockerfile_ready": true
640
+ },
641
+ {
642
+ "tool_name": "bioconductor-spatialdmelxsim",
643
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spatialdmelxsim.manual_bundle.txt",
644
+ "run_help_command": false,
645
+ "status": "success",
646
+ "error": "",
647
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spatialdmelxsim/app/bioconductor-spatialdmelxsim_server.py",
648
+ "dockerfile_ready": true
649
+ },
650
+ {
651
+ "tool_name": "bioconductor-spatialfeatureexperiment",
652
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spatialfeatureexperiment.manual_bundle.txt",
653
+ "run_help_command": false,
654
+ "status": "success",
655
+ "error": "",
656
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spatialfeatureexperiment/app/bioconductor-spatialfeatureexperiment_server.py",
657
+ "dockerfile_ready": true
658
+ },
659
+ {
660
+ "tool_name": "bioconductor-spatiallibd",
661
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spatiallibd.manual_bundle.txt",
662
+ "run_help_command": false,
663
+ "status": "success",
664
+ "error": "",
665
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spatiallibd/app/bioconductor-spatiallibd_server.py",
666
+ "dockerfile_ready": true
667
+ },
668
+ {
669
+ "tool_name": "bioconductor-spatialomicsoverlay",
670
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spatialomicsoverlay.manual_bundle.txt",
671
+ "run_help_command": false,
672
+ "status": "success",
673
+ "error": "",
674
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spatialomicsoverlay/app/bioconductor-spatialomicsoverlay_server.py",
675
+ "dockerfile_ready": true
676
+ },
677
+ {
678
+ "tool_name": "bioconductor-spatialsimgp",
679
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spatialsimgp.manual_bundle.txt",
680
+ "run_help_command": false,
681
+ "status": "success",
682
+ "error": "",
683
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spatialsimgp/app/bioconductor-spatialsimgp_server.py",
684
+ "dockerfile_ready": true
685
+ },
686
+ {
687
+ "tool_name": "bioconductor-speckle",
688
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-speckle.manual_bundle.txt",
689
+ "run_help_command": false,
690
+ "status": "failed",
691
+ "error": "refine failed (retry=1): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
692
+ "output_file": "",
693
+ "dockerfile_ready": false
694
+ },
695
+ {
696
+ "tool_name": "bioconductor-spiat",
697
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spiat.manual_bundle.txt",
698
+ "run_help_command": false,
699
+ "status": "success",
700
+ "error": "",
701
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spiat/app/bioconductor-spiat_server.py",
702
+ "dockerfile_ready": true
703
+ },
704
+ {
705
+ "tool_name": "bioconductor-spicyr",
706
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spicyr.manual_bundle.txt",
707
+ "run_help_command": false,
708
+ "status": "success",
709
+ "error": "",
710
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spicyr/app/bioconductor-spicyr_server.py",
711
+ "dockerfile_ready": true
712
+ },
713
+ {
714
+ "tool_name": "bioconductor-spoon",
715
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spoon.manual_bundle.txt",
716
+ "run_help_command": false,
717
+ "status": "success",
718
+ "error": "",
719
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spoon/app/bioconductor-spoon_server.py",
720
+ "dockerfile_ready": true
721
+ },
722
+ {
723
+ "tool_name": "bioconductor-spotclean",
724
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spotclean.manual_bundle.txt",
725
+ "run_help_command": false,
726
+ "status": "success",
727
+ "error": "",
728
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spotclean/app/bioconductor-spotclean_server.py",
729
+ "dockerfile_ready": true
730
+ },
731
+ {
732
+ "tool_name": "bioconductor-spotsweeper",
733
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-spotsweeper.manual_bundle.txt",
734
+ "run_help_command": false,
735
+ "status": "success",
736
+ "error": "",
737
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-spotsweeper/app/bioconductor-spotsweeper_server.py",
738
+ "dockerfile_ready": true
739
+ },
740
+ {
741
+ "tool_name": "bioconductor-standr",
742
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-standr.manual_bundle.txt",
743
+ "run_help_command": false,
744
+ "status": "success",
745
+ "error": "",
746
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-standr/app/bioconductor-standr_server.py",
747
+ "dockerfile_ready": true
748
+ },
749
+ {
750
+ "tool_name": "bioconductor-statial",
751
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-statial.manual_bundle.txt",
752
+ "run_help_command": false,
753
+ "status": "failed",
754
+ "error": "refine failed (retry=2): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
755
+ "output_file": "",
756
+ "dockerfile_ready": false
757
+ },
758
+ {
759
+ "tool_name": "bioconductor-stexampledata",
760
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-stexampledata.manual_bundle.txt",
761
+ "run_help_command": false,
762
+ "status": "success",
763
+ "error": "",
764
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-stexampledata/app/bioconductor-stexampledata_server.py",
765
+ "dockerfile_ready": true
766
+ },
767
+ {
768
+ "tool_name": "bioconductor-stjoincount",
769
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-stjoincount.manual_bundle.txt",
770
+ "run_help_command": false,
771
+ "status": "success",
772
+ "error": "",
773
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-stjoincount/app/bioconductor-stjoincount_server.py",
774
+ "dockerfile_ready": true
775
+ },
776
+ {
777
+ "tool_name": "bioconductor-stpipe",
778
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-stpipe.manual_bundle.txt",
779
+ "run_help_command": false,
780
+ "status": "success",
781
+ "error": "",
782
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-stpipe/app/bioconductor-stpipe_server.py",
783
+ "dockerfile_ready": true
784
+ },
785
+ {
786
+ "tool_name": "bioconductor-subcellularspatialdata",
787
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-subcellularspatialdata.manual_bundle.txt",
788
+ "run_help_command": false,
789
+ "status": "success",
790
+ "error": "",
791
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-subcellularspatialdata/app/bioconductor-subcellularspatialdata_server.py",
792
+ "dockerfile_ready": true
793
+ },
794
+ {
795
+ "tool_name": "bioconductor-svp",
796
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-svp.manual_bundle.txt",
797
+ "run_help_command": false,
798
+ "status": "success",
799
+ "error": "",
800
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-svp/app/bioconductor-svp_server.py",
801
+ "dockerfile_ready": true
802
+ },
803
+ {
804
+ "tool_name": "bioconductor-synergyfinder",
805
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-synergyfinder.manual_bundle.txt",
806
+ "run_help_command": false,
807
+ "status": "success",
808
+ "error": "",
809
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-synergyfinder/app/bioconductor-synergyfinder_server.py",
810
+ "dockerfile_ready": true
811
+ },
812
+ {
813
+ "tool_name": "bioconductor-tenxvisiumdata",
814
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-tenxvisiumdata.manual_bundle.txt",
815
+ "run_help_command": false,
816
+ "status": "success",
817
+ "error": "",
818
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-tenxvisiumdata/app/bioconductor-tenxvisiumdata_server.py",
819
+ "dockerfile_ready": true
820
+ },
821
+ {
822
+ "tool_name": "bioconductor-tidyomics",
823
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-tidyomics.manual_bundle.txt",
824
+ "run_help_command": false,
825
+ "status": "success",
826
+ "error": "",
827
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-tidyomics/app/bioconductor-tidyomics_server.py",
828
+ "dockerfile_ready": true
829
+ },
830
+ {
831
+ "tool_name": "bioconductor-tidyspatialexperiment",
832
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-tidyspatialexperiment.manual_bundle.txt",
833
+ "run_help_command": false,
834
+ "status": "success",
835
+ "error": "",
836
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-tidyspatialexperiment/app/bioconductor-tidyspatialexperiment_server.py",
837
+ "dockerfile_ready": true
838
+ },
839
+ {
840
+ "tool_name": "bioconductor-tpsvg",
841
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-tpsvg.manual_bundle.txt",
842
+ "run_help_command": false,
843
+ "status": "success",
844
+ "error": "",
845
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-tpsvg/app/bioconductor-tpsvg_server.py",
846
+ "dockerfile_ready": true
847
+ },
848
+ {
849
+ "tool_name": "bioconductor-vectrapolarisdata",
850
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-vectrapolarisdata.manual_bundle.txt",
851
+ "run_help_command": false,
852
+ "status": "success",
853
+ "error": "",
854
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-vectrapolarisdata/app/bioconductor-vectrapolarisdata_server.py",
855
+ "dockerfile_ready": true
856
+ },
857
+ {
858
+ "tool_name": "bioconductor-visiumio",
859
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-visiumio.manual_bundle.txt",
860
+ "run_help_command": false,
861
+ "status": "success",
862
+ "error": "",
863
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-visiumio/app/bioconductor-visiumio_server.py",
864
+ "dockerfile_ready": true
865
+ },
866
+ {
867
+ "tool_name": "bioconductor-voyager",
868
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-voyager.manual_bundle.txt",
869
+ "run_help_command": false,
870
+ "status": "success",
871
+ "error": "",
872
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-voyager/app/bioconductor-voyager_server.py",
873
+ "dockerfile_ready": true
874
+ },
875
+ {
876
+ "tool_name": "bioconductor-weberdivechalcdata",
877
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-weberdivechalcdata.manual_bundle.txt",
878
+ "run_help_command": false,
879
+ "status": "success",
880
+ "error": "",
881
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-weberdivechalcdata/app/bioconductor-weberdivechalcdata_server.py",
882
+ "dockerfile_ready": true
883
+ },
884
+ {
885
+ "tool_name": "bioconductor-xeniumio",
886
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-xeniumio.manual_bundle.txt",
887
+ "run_help_command": false,
888
+ "status": "success",
889
+ "error": "",
890
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-xeniumio/app/bioconductor-xeniumio_server.py",
891
+ "dockerfile_ready": true
892
+ },
893
+ {
894
+ "tool_name": "bioconductor-xenlite",
895
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bioconductor-xenlite.manual_bundle.txt",
896
+ "run_help_command": false,
897
+ "status": "success",
898
+ "error": "",
899
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-xenlite/app/bioconductor-xenlite_server.py",
900
+ "dockerfile_ready": true
901
+ },
902
+ {
903
+ "tool_name": "bwa",
904
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/bwa.manual_bundle.txt",
905
+ "run_help_command": false,
906
+ "status": "success",
907
+ "error": "",
908
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bwa/app/bwa_server.py",
909
+ "dockerfile_ready": true
910
+ },
911
+ {
912
+ "tool_name": "cascade-reg",
913
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/cascade-reg.manual_bundle.txt",
914
+ "run_help_command": false,
915
+ "status": "skipped_existing",
916
+ "error": "",
917
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_cascade-reg/app/cascade-reg_server.py",
918
+ "dockerfile_ready": true
919
+ },
920
+ {
921
+ "tool_name": "cell2cell",
922
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/cell2cell.manual_bundle.txt",
923
+ "run_help_command": false,
924
+ "status": "skipped_existing",
925
+ "error": "",
926
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_cell2cell/app/cell2cell_server.py",
927
+ "dockerfile_ready": true
928
+ },
929
+ {
930
+ "tool_name": "cellitac",
931
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/cellitac.manual_bundle.txt",
932
+ "run_help_command": false,
933
+ "status": "success",
934
+ "error": "",
935
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_cellitac/app/cellitac_server.py",
936
+ "dockerfile_ready": true
937
+ },
938
+ {
939
+ "tool_name": "cellqc",
940
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/cellqc.manual_bundle.txt",
941
+ "run_help_command": false,
942
+ "status": "success",
943
+ "error": "",
944
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_cellqc/app/cellqc_server.py",
945
+ "dockerfile_ready": true
946
+ },
947
+ {
948
+ "tool_name": "cellsnake",
949
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/cellsnake.manual_bundle.txt",
950
+ "run_help_command": false,
951
+ "status": "success",
952
+ "error": "",
953
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_cellsnake/app/cellsnake_server.py",
954
+ "dockerfile_ready": true
955
+ },
956
+ {
957
+ "tool_name": "celltypist-so",
958
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/celltypist-so.manual_bundle.txt",
959
+ "run_help_command": false,
960
+ "status": "success",
961
+ "error": "",
962
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_celltypist-so/app/celltypist-so_server.py",
963
+ "dockerfile_ready": true
964
+ },
965
+ {
966
+ "tool_name": "checkatlas",
967
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/checkatlas.manual_bundle.txt",
968
+ "run_help_command": false,
969
+ "status": "success",
970
+ "error": "",
971
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_checkatlas/app/checkatlas_server.py",
972
+ "dockerfile_ready": true
973
+ },
974
+ {
975
+ "tool_name": "comebin",
976
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/comebin.manual_bundle.txt",
977
+ "run_help_command": false,
978
+ "status": "success",
979
+ "error": "",
980
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_comebin/app/comebin_server.py",
981
+ "dockerfile_ready": true
982
+ },
983
+ {
984
+ "tool_name": "cosg",
985
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/cosg.manual_bundle.txt",
986
+ "run_help_command": false,
987
+ "status": "skipped_existing",
988
+ "error": "",
989
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_cosg/app/cosg_server.py",
990
+ "dockerfile_ready": true
991
+ },
992
+ {
993
+ "tool_name": "cospar",
994
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/cospar.manual_bundle.txt",
995
+ "run_help_command": false,
996
+ "status": "success",
997
+ "error": "",
998
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_cospar/app/cospar_server.py",
999
+ "dockerfile_ready": true
1000
+ },
1001
+ {
1002
+ "tool_name": "dca",
1003
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/dca.manual_bundle.txt",
1004
+ "run_help_command": false,
1005
+ "status": "success",
1006
+ "error": "",
1007
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_dca/app/dca_server.py",
1008
+ "dockerfile_ready": true
1009
+ },
1010
+ {
1011
+ "tool_name": "doubletdetection",
1012
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/doubletdetection.manual_bundle.txt",
1013
+ "run_help_command": false,
1014
+ "status": "skipped_existing",
1015
+ "error": "",
1016
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_doubletdetection/app/doubletdetection_server.py",
1017
+ "dockerfile_ready": true
1018
+ },
1019
+ {
1020
+ "tool_name": "dropkick",
1021
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/dropkick.manual_bundle.txt",
1022
+ "run_help_command": false,
1023
+ "status": "success",
1024
+ "error": "",
1025
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_dropkick/app/dropkick_server.py",
1026
+ "dockerfile_ready": true
1027
+ },
1028
+ {
1029
+ "tool_name": "easy_vitessce",
1030
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/easy_vitessce.manual_bundle.txt",
1031
+ "run_help_command": false,
1032
+ "status": "failed",
1033
+ "error": "refine failed (retry=1): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: exception HTTPSConnectionPool(host='generativelanguage.googleapis.com', port=443): Read timed out. (read timeout=180) | gemini-2.5-flash: exception HTTPSConnectionPool(host='generativelanguage.googleapis.com', port=443): Read timed out. (read timeout=180)",
1034
+ "output_file": "",
1035
+ "dockerfile_ready": false
1036
+ },
1037
+ {
1038
+ "tool_name": "echidna",
1039
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/echidna.manual_bundle.txt",
1040
+ "run_help_command": false,
1041
+ "status": "success",
1042
+ "error": "",
1043
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_echidna/app/echidna_server.py",
1044
+ "dockerfile_ready": true
1045
+ },
1046
+ {
1047
+ "tool_name": "episcanpy",
1048
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/episcanpy.manual_bundle.txt",
1049
+ "run_help_command": false,
1050
+ "status": "success",
1051
+ "error": "",
1052
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_episcanpy/app/episcanpy_server.py",
1053
+ "dockerfile_ready": true
1054
+ },
1055
+ {
1056
+ "tool_name": "flagx",
1057
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/flagx.manual_bundle.txt",
1058
+ "run_help_command": false,
1059
+ "status": "success",
1060
+ "error": "",
1061
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_flagx/app/flagx_server.py",
1062
+ "dockerfile_ready": true
1063
+ },
1064
+ {
1065
+ "tool_name": "gene-trajectory-python",
1066
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/gene-trajectory-python.manual_bundle.txt",
1067
+ "run_help_command": false,
1068
+ "status": "success",
1069
+ "error": "",
1070
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_gene-trajectory-python/app/gene-trajectory-python_server.py",
1071
+ "dockerfile_ready": true
1072
+ },
1073
+ {
1074
+ "tool_name": "genecircuitry",
1075
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/genecircuitry.manual_bundle.txt",
1076
+ "run_help_command": false,
1077
+ "status": "failed",
1078
+ "error": "refine failed (retry=1): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
1079
+ "output_file": "",
1080
+ "dockerfile_ready": false
1081
+ },
1082
+ {
1083
+ "tool_name": "htslib",
1084
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/htslib.manual_bundle.txt",
1085
+ "run_help_command": false,
1086
+ "status": "failed",
1087
+ "error": "refine failed (retry=1): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
1088
+ "output_file": "",
1089
+ "dockerfile_ready": false
1090
+ },
1091
+ {
1092
+ "tool_name": "kb-python",
1093
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/kb-python.manual_bundle.txt",
1094
+ "run_help_command": false,
1095
+ "status": "skipped_existing",
1096
+ "error": "",
1097
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_kb-python/app/kb-python_server.py",
1098
+ "dockerfile_ready": true
1099
+ },
1100
+ {
1101
+ "tool_name": "khipu-metabolomics",
1102
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/khipu-metabolomics.manual_bundle.txt",
1103
+ "run_help_command": false,
1104
+ "status": "skipped_existing",
1105
+ "error": "",
1106
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_khipu-metabolomics/app/khipu-metabolomics_server.py",
1107
+ "dockerfile_ready": true
1108
+ },
1109
+ {
1110
+ "tool_name": "last",
1111
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/last.manual_bundle.txt",
1112
+ "run_help_command": false,
1113
+ "status": "success",
1114
+ "error": "",
1115
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_last/app/last_server.py",
1116
+ "dockerfile_ready": true
1117
+ },
1118
+ {
1119
+ "tool_name": "liana",
1120
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/liana.manual_bundle.txt",
1121
+ "run_help_command": false,
1122
+ "status": "failed",
1123
+ "error": "autogenerate_mcp_tool failed: Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: exception HTTPSConnectionPool(host='generativelanguage.googleapis.com', port=443): Read timed out. (read timeout=180) | gemini-2.5-flash: exception HTTPSConnectionPool(host='generativelanguage.googleapis.com', port=443): Read timed out. (read timeout=180)",
1124
+ "output_file": "",
1125
+ "dockerfile_ready": false
1126
+ },
1127
+ {
1128
+ "tool_name": "mameshiba",
1129
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/mameshiba.manual_bundle.txt",
1130
+ "run_help_command": false,
1131
+ "status": "success",
1132
+ "error": "",
1133
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_mameshiba/app/mameshiba_server.py",
1134
+ "dockerfile_ready": true
1135
+ },
1136
+ {
1137
+ "tool_name": "markerrepo",
1138
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/markerrepo.manual_bundle.txt",
1139
+ "run_help_command": false,
1140
+ "status": "success",
1141
+ "error": "",
1142
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_markerrepo/app/markerrepo_server.py",
1143
+ "dockerfile_ready": true
1144
+ },
1145
+ {
1146
+ "tool_name": "mobivision-m",
1147
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/mobivision-m.manual_bundle.txt",
1148
+ "run_help_command": false,
1149
+ "status": "failed",
1150
+ "error": "autogenerate_mcp_tool failed: Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: exception HTTPSConnectionPool(host='generativelanguage.googleapis.com', port=443): Read timed out. (read timeout=180) | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
1151
+ "output_file": "",
1152
+ "dockerfile_ready": false
1153
+ },
1154
+ {
1155
+ "tool_name": "msproteomicstools",
1156
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/msproteomicstools.manual_bundle.txt",
1157
+ "run_help_command": false,
1158
+ "status": "failed",
1159
+ "error": "autogenerate_mcp_tool failed: Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: exception HTTPSConnectionPool(host='generativelanguage.googleapis.com', port=443): Read timed out. (read timeout=180)",
1160
+ "output_file": "",
1161
+ "dockerfile_ready": false
1162
+ },
1163
+ {
1164
+ "tool_name": "multiqc-xenium-extra",
1165
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/multiqc-xenium-extra.manual_bundle.txt",
1166
+ "run_help_command": false,
1167
+ "status": "skipped_existing",
1168
+ "error": "",
1169
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_multiqc-xenium-extra/app/multiqc-xenium-extra_server.py",
1170
+ "dockerfile_ready": true
1171
+ },
1172
+ {
1173
+ "tool_name": "ngs-smap",
1174
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/ngs-smap.manual_bundle.txt",
1175
+ "run_help_command": false,
1176
+ "status": "success",
1177
+ "error": "",
1178
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ngs-smap/app/ngs-smap_server.py",
1179
+ "dockerfile_ready": true
1180
+ },
1181
+ {
1182
+ "tool_name": "novae",
1183
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/novae.manual_bundle.txt",
1184
+ "run_help_command": false,
1185
+ "status": "success",
1186
+ "error": "",
1187
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_novae/app/novae_server.py",
1188
+ "dockerfile_ready": true
1189
+ },
1190
+ {
1191
+ "tool_name": "openms-thirdparty",
1192
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/openms-thirdparty.manual_bundle.txt",
1193
+ "run_help_command": false,
1194
+ "status": "success",
1195
+ "error": "",
1196
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_openms-thirdparty/app/openms-thirdparty_server.py",
1197
+ "dockerfile_ready": true
1198
+ },
1199
+ {
1200
+ "tool_name": "opticlust",
1201
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/opticlust.manual_bundle.txt",
1202
+ "run_help_command": false,
1203
+ "status": "failed",
1204
+ "error": "refine failed (retry=1): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
1205
+ "output_file": "",
1206
+ "dockerfile_ready": false
1207
+ },
1208
+ {
1209
+ "tool_name": "ourotools",
1210
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/ourotools.manual_bundle.txt",
1211
+ "run_help_command": false,
1212
+ "status": "failed",
1213
+ "error": "refine failed (retry=1): Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
1214
+ "output_file": "",
1215
+ "dockerfile_ready": false
1216
+ },
1217
+ {
1218
+ "tool_name": "palantir",
1219
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/palantir.manual_bundle.txt",
1220
+ "run_help_command": false,
1221
+ "status": "skipped_existing",
1222
+ "error": "",
1223
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_palantir/app/palantir_server.py",
1224
+ "dockerfile_ready": true
1225
+ },
1226
+ {
1227
+ "tool_name": "paste-bio",
1228
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/paste-bio.manual_bundle.txt",
1229
+ "run_help_command": false,
1230
+ "status": "skipped_existing",
1231
+ "error": "",
1232
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_paste-bio/app/paste-bio_server.py",
1233
+ "dockerfile_ready": true
1234
+ },
1235
+ {
1236
+ "tool_name": "pcdl",
1237
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/pcdl.manual_bundle.txt",
1238
+ "run_help_command": false,
1239
+ "status": "success",
1240
+ "error": "",
1241
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_pcdl/app/pcdl_server.py",
1242
+ "dockerfile_ready": true
1243
+ },
1244
+ {
1245
+ "tool_name": "peakqc",
1246
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/peakqc.manual_bundle.txt",
1247
+ "run_help_command": false,
1248
+ "status": "success",
1249
+ "error": "",
1250
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_peakqc/app/peakqc_server.py",
1251
+ "dockerfile_ready": true
1252
+ },
1253
+ {
1254
+ "tool_name": "peptides",
1255
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/peptides.manual_bundle.txt",
1256
+ "run_help_command": false,
1257
+ "status": "success",
1258
+ "error": "",
1259
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_peptides/app/peptides_server.py",
1260
+ "dockerfile_ready": true
1261
+ },
1262
+ {
1263
+ "tool_name": "piaso",
1264
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/piaso.manual_bundle.txt",
1265
+ "run_help_command": false,
1266
+ "status": "success",
1267
+ "error": "",
1268
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_piaso/app/piaso_server.py",
1269
+ "dockerfile_ready": true
1270
+ },
1271
+ {
1272
+ "tool_name": "pixelator",
1273
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/pixelator.manual_bundle.txt",
1274
+ "run_help_command": false,
1275
+ "status": "success",
1276
+ "error": "",
1277
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_pixelator/app/pixelator_server.py",
1278
+ "dockerfile_ready": true
1279
+ },
1280
+ {
1281
+ "tool_name": "proteomiqon-peptidedb",
1282
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/proteomiqon-peptidedb.manual_bundle.txt",
1283
+ "run_help_command": false,
1284
+ "status": "success",
1285
+ "error": "",
1286
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_proteomiqon-peptidedb/app/proteomiqon-peptidedb_server.py",
1287
+ "dockerfile_ready": true
1288
+ },
1289
+ {
1290
+ "tool_name": "pyrovelocity",
1291
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/pyrovelocity.manual_bundle.txt",
1292
+ "run_help_command": false,
1293
+ "status": "failed",
1294
+ "error": "autogenerate_mcp_tool failed: Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
1295
+ "output_file": "",
1296
+ "dockerfile_ready": false
1297
+ },
1298
+ {
1299
+ "tool_name": "qcatch",
1300
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/qcatch.manual_bundle.txt",
1301
+ "run_help_command": false,
1302
+ "status": "success",
1303
+ "error": "",
1304
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_qcatch/app/qcatch_server.py",
1305
+ "dockerfile_ready": true
1306
+ },
1307
+ {
1308
+ "tool_name": "r-archr",
1309
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-archr.manual_bundle.txt",
1310
+ "run_help_command": false,
1311
+ "status": "success",
1312
+ "error": "",
1313
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-archr/app/r-archr_server.py",
1314
+ "dockerfile_ready": true
1315
+ },
1316
+ {
1317
+ "tool_name": "r-azimuth",
1318
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-azimuth.manual_bundle.txt",
1319
+ "run_help_command": false,
1320
+ "status": "success",
1321
+ "error": "",
1322
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-azimuth/app/r-azimuth_server.py",
1323
+ "dockerfile_ready": true
1324
+ },
1325
+ {
1326
+ "tool_name": "r-beyondcell",
1327
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-beyondcell.manual_bundle.txt",
1328
+ "run_help_command": false,
1329
+ "status": "success",
1330
+ "error": "",
1331
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-beyondcell/app/r-beyondcell_server.py",
1332
+ "dockerfile_ready": true
1333
+ },
1334
+ {
1335
+ "tool_name": "r-cdseq",
1336
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-cdseq.manual_bundle.txt",
1337
+ "run_help_command": false,
1338
+ "status": "success",
1339
+ "error": "",
1340
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-cdseq/app/r-cdseq_server.py",
1341
+ "dockerfile_ready": true
1342
+ },
1343
+ {
1344
+ "tool_name": "r-dwls",
1345
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-dwls.manual_bundle.txt",
1346
+ "run_help_command": false,
1347
+ "status": "success",
1348
+ "error": "",
1349
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-dwls/app/r-dwls_server.py",
1350
+ "dockerfile_ready": true
1351
+ },
1352
+ {
1353
+ "tool_name": "r-epitrace",
1354
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-epitrace.manual_bundle.txt",
1355
+ "run_help_command": false,
1356
+ "status": "success",
1357
+ "error": "",
1358
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-epitrace/app/r-epitrace_server.py",
1359
+ "dockerfile_ready": true
1360
+ },
1361
+ {
1362
+ "tool_name": "r-flanders",
1363
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-flanders.manual_bundle.txt",
1364
+ "run_help_command": false,
1365
+ "status": "success",
1366
+ "error": "",
1367
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-flanders/app/r-flanders_server.py",
1368
+ "dockerfile_ready": true
1369
+ },
1370
+ {
1371
+ "tool_name": "r-mams",
1372
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-mams.manual_bundle.txt",
1373
+ "run_help_command": false,
1374
+ "status": "success",
1375
+ "error": "",
1376
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-mams/app/r-mams_server.py",
1377
+ "dockerfile_ready": true
1378
+ },
1379
+ {
1380
+ "tool_name": "r-redeemr",
1381
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-redeemr.manual_bundle.txt",
1382
+ "run_help_command": false,
1383
+ "status": "success",
1384
+ "error": "",
1385
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-redeemr/app/r-redeemr_server.py",
1386
+ "dockerfile_ready": true
1387
+ },
1388
+ {
1389
+ "tool_name": "r-sceasy",
1390
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-sceasy.manual_bundle.txt",
1391
+ "run_help_command": false,
1392
+ "status": "success",
1393
+ "error": "",
1394
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-sceasy/app/r-sceasy_server.py",
1395
+ "dockerfile_ready": true
1396
+ },
1397
+ {
1398
+ "tool_name": "r-scopfunctions",
1399
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-scopfunctions.manual_bundle.txt",
1400
+ "run_help_command": false,
1401
+ "status": "success",
1402
+ "error": "",
1403
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-scopfunctions/app/r-scopfunctions_server.py",
1404
+ "dockerfile_ready": true
1405
+ },
1406
+ {
1407
+ "tool_name": "r-seurat-data",
1408
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-seurat-data.manual_bundle.txt",
1409
+ "run_help_command": false,
1410
+ "status": "failed",
1411
+ "error": "autogenerate_mcp_tool failed: Gemini request failed across all models. gemini-2.5-pro: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n | gemini-3-flash-preview: exception HTTPSConnectionPool(host='generativelanguage.googleapis.com', port=443): Read timed out. (read timeout=180) | gemini-2.5-flash: HTTP 400 - {\n \"error\": {\n \"code\": 400,\n \"message\": \"User location is not supported for the API use.\",\n \"status\": \"FAILED_PRECONDITION\"\n }\n}\n",
1412
+ "output_file": "",
1413
+ "dockerfile_ready": false
1414
+ },
1415
+ {
1416
+ "tool_name": "r-seurat-disk",
1417
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/r-seurat-disk.manual_bundle.txt",
1418
+ "run_help_command": false,
1419
+ "status": "success",
1420
+ "error": "",
1421
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_r-seurat-disk/app/r-seurat-disk_server.py",
1422
+ "dockerfile_ready": true
1423
+ },
1424
+ {
1425
+ "tool_name": "sage-proteomics",
1426
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/sage-proteomics.manual_bundle.txt",
1427
+ "run_help_command": false,
1428
+ "status": "skipped_existing",
1429
+ "error": "",
1430
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_sage-proteomics/app/sage-proteomics_server.py",
1431
+ "dockerfile_ready": true
1432
+ },
1433
+ {
1434
+ "tool_name": "samap",
1435
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/samap.manual_bundle.txt",
1436
+ "run_help_command": false,
1437
+ "status": "success",
1438
+ "error": "",
1439
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_samap/app/samap_server.py",
1440
+ "dockerfile_ready": true
1441
+ },
1442
+ {
1443
+ "tool_name": "samtools",
1444
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/samtools.manual_bundle.txt",
1445
+ "run_help_command": false,
1446
+ "status": "success",
1447
+ "error": "",
1448
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_samtools/app/samtools_server.py",
1449
+ "dockerfile_ready": true
1450
+ },
1451
+ {
1452
+ "tool_name": "sc-musketeers",
1453
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/sc-musketeers.manual_bundle.txt",
1454
+ "run_help_command": false,
1455
+ "status": "success",
1456
+ "error": "",
1457
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_sc-musketeers/app/sc-musketeers_server.py",
1458
+ "dockerfile_ready": true
1459
+ },
1460
+ {
1461
+ "tool_name": "scaden",
1462
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scaden.manual_bundle.txt",
1463
+ "run_help_command": false,
1464
+ "status": "success",
1465
+ "error": "",
1466
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scaden/app/scaden_server.py",
1467
+ "dockerfile_ready": true
1468
+ },
1469
+ {
1470
+ "tool_name": "scanpy-cli",
1471
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scanpy-cli.manual_bundle.txt",
1472
+ "run_help_command": false,
1473
+ "status": "success",
1474
+ "error": "",
1475
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scanpy-cli/app/scanpy-cli_server.py",
1476
+ "dockerfile_ready": true
1477
+ },
1478
+ {
1479
+ "tool_name": "scanpy-scripts",
1480
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scanpy-scripts.manual_bundle.txt",
1481
+ "run_help_command": false,
1482
+ "status": "success",
1483
+ "error": "",
1484
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scanpy-scripts/app/scanpy-scripts_server.py",
1485
+ "dockerfile_ready": true
1486
+ },
1487
+ {
1488
+ "tool_name": "sccellfie",
1489
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/sccellfie.manual_bundle.txt",
1490
+ "run_help_command": false,
1491
+ "status": "success",
1492
+ "error": "",
1493
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_sccellfie/app/sccellfie_server.py",
1494
+ "dockerfile_ready": true
1495
+ },
1496
+ {
1497
+ "tool_name": "scepia",
1498
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scepia.manual_bundle.txt",
1499
+ "run_help_command": false,
1500
+ "status": "success",
1501
+ "error": "",
1502
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scepia/app/scepia_server.py",
1503
+ "dockerfile_ready": true
1504
+ },
1505
+ {
1506
+ "tool_name": "scglue",
1507
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scglue.manual_bundle.txt",
1508
+ "run_help_command": false,
1509
+ "status": "success",
1510
+ "error": "",
1511
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scglue/app/scglue_server.py",
1512
+ "dockerfile_ready": true
1513
+ },
1514
+ {
1515
+ "tool_name": "scib",
1516
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scib.manual_bundle.txt",
1517
+ "run_help_command": false,
1518
+ "status": "skipped_existing",
1519
+ "error": "",
1520
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scib/app/scib_server.py",
1521
+ "dockerfile_ready": true
1522
+ },
1523
+ {
1524
+ "tool_name": "scirpy",
1525
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scirpy.manual_bundle.txt",
1526
+ "run_help_command": false,
1527
+ "status": "skipped_existing",
1528
+ "error": "",
1529
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scirpy/app/scirpy_server.py",
1530
+ "dockerfile_ready": true
1531
+ },
1532
+ {
1533
+ "tool_name": "scmidas",
1534
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scmidas.manual_bundle.txt",
1535
+ "run_help_command": false,
1536
+ "status": "skipped_existing",
1537
+ "error": "",
1538
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scmidas/app/scmidas_server.py",
1539
+ "dockerfile_ready": true
1540
+ },
1541
+ {
1542
+ "tool_name": "scrnasim-toolz",
1543
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scrnasim-toolz.manual_bundle.txt",
1544
+ "run_help_command": false,
1545
+ "status": "success",
1546
+ "error": "",
1547
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scrnasim-toolz/app/scrnasim-toolz_server.py",
1548
+ "dockerfile_ready": true
1549
+ },
1550
+ {
1551
+ "tool_name": "scspectra",
1552
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scspectra.manual_bundle.txt",
1553
+ "run_help_command": false,
1554
+ "status": "success",
1555
+ "error": "",
1556
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scspectra/app/scspectra_server.py",
1557
+ "dockerfile_ready": true
1558
+ },
1559
+ {
1560
+ "tool_name": "scstem",
1561
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scstem.manual_bundle.txt",
1562
+ "run_help_command": false,
1563
+ "status": "success",
1564
+ "error": "",
1565
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scstem/app/scstem_server.py",
1566
+ "dockerfile_ready": true
1567
+ },
1568
+ {
1569
+ "tool_name": "sctriangulate",
1570
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/sctriangulate.manual_bundle.txt",
1571
+ "run_help_command": false,
1572
+ "status": "success",
1573
+ "error": "",
1574
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_sctriangulate/app/sctriangulate_server.py",
1575
+ "dockerfile_ready": true
1576
+ },
1577
+ {
1578
+ "tool_name": "scvi",
1579
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scvi.manual_bundle.txt",
1580
+ "run_help_command": false,
1581
+ "status": "skipped_existing",
1582
+ "error": "",
1583
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scvi/app/scvi_server.py",
1584
+ "dockerfile_ready": true
1585
+ },
1586
+ {
1587
+ "tool_name": "scvi-tools",
1588
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scvi-tools.manual_bundle.txt",
1589
+ "run_help_command": false,
1590
+ "status": "skipped_existing",
1591
+ "error": "",
1592
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scvi-tools/app/scvi-tools_server.py",
1593
+ "dockerfile_ready": true
1594
+ },
1595
+ {
1596
+ "tool_name": "scvis",
1597
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scvis.manual_bundle.txt",
1598
+ "run_help_command": false,
1599
+ "status": "success",
1600
+ "error": "",
1601
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scvis/app/scvis_server.py",
1602
+ "dockerfile_ready": true
1603
+ },
1604
+ {
1605
+ "tool_name": "scvis_galaxy",
1606
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scvis_galaxy.manual_bundle.txt",
1607
+ "run_help_command": false,
1608
+ "status": "success",
1609
+ "error": "",
1610
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scvis_galaxy/app/scvis_galaxy_server.py",
1611
+ "dockerfile_ready": true
1612
+ },
1613
+ {
1614
+ "tool_name": "scxmatch",
1615
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/scxmatch.manual_bundle.txt",
1616
+ "run_help_command": false,
1617
+ "status": "success",
1618
+ "error": "",
1619
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_scxmatch/app/scxmatch_server.py",
1620
+ "dockerfile_ready": true
1621
+ },
1622
+ {
1623
+ "tool_name": "sdeper",
1624
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/sdeper.manual_bundle.txt",
1625
+ "run_help_command": false,
1626
+ "status": "success",
1627
+ "error": "",
1628
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_sdeper/app/sdeper_server.py",
1629
+ "dockerfile_ready": true
1630
+ },
1631
+ {
1632
+ "tool_name": "seacells",
1633
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/seacells.manual_bundle.txt",
1634
+ "run_help_command": false,
1635
+ "status": "success",
1636
+ "error": "",
1637
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_seacells/app/seacells_server.py",
1638
+ "dockerfile_ready": true
1639
+ },
1640
+ {
1641
+ "tool_name": "shiba",
1642
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/shiba.manual_bundle.txt",
1643
+ "run_help_command": false,
1644
+ "status": "success",
1645
+ "error": "",
1646
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_shiba/app/shiba_server.py",
1647
+ "dockerfile_ready": true
1648
+ },
1649
+ {
1650
+ "tool_name": "simo-omics",
1651
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/simo-omics.manual_bundle.txt",
1652
+ "run_help_command": false,
1653
+ "status": "success",
1654
+ "error": "",
1655
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_simo-omics/app/simo-omics_server.py",
1656
+ "dockerfile_ready": true
1657
+ },
1658
+ {
1659
+ "tool_name": "sincei",
1660
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/sincei.manual_bundle.txt",
1661
+ "run_help_command": false,
1662
+ "status": "success",
1663
+ "error": "",
1664
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_sincei/app/sincei_server.py",
1665
+ "dockerfile_ready": true
1666
+ },
1667
+ {
1668
+ "tool_name": "sopa",
1669
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/sopa.manual_bundle.txt",
1670
+ "run_help_command": false,
1671
+ "status": "success",
1672
+ "error": "",
1673
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_sopa/app/sopa_server.py",
1674
+ "dockerfile_ready": true
1675
+ },
1676
+ {
1677
+ "tool_name": "spagrn",
1678
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/spagrn.manual_bundle.txt",
1679
+ "run_help_command": false,
1680
+ "status": "success",
1681
+ "error": "",
1682
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_spagrn/app/spagrn_server.py",
1683
+ "dockerfile_ready": true
1684
+ },
1685
+ {
1686
+ "tool_name": "spapros",
1687
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/spapros.manual_bundle.txt",
1688
+ "run_help_command": false,
1689
+ "status": "success",
1690
+ "error": "",
1691
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_spapros/app/spapros_server.py",
1692
+ "dockerfile_ready": true
1693
+ },
1694
+ {
1695
+ "tool_name": "spatialleiden",
1696
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/spatialleiden.manual_bundle.txt",
1697
+ "run_help_command": false,
1698
+ "status": "success",
1699
+ "error": "",
1700
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_spatialleiden/app/spatialleiden_server.py",
1701
+ "dockerfile_ready": true
1702
+ },
1703
+ {
1704
+ "tool_name": "switchtfi",
1705
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/switchtfi.manual_bundle.txt",
1706
+ "run_help_command": false,
1707
+ "status": "success",
1708
+ "error": "",
1709
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_switchtfi/app/switchtfi_server.py",
1710
+ "dockerfile_ready": true
1711
+ },
1712
+ {
1713
+ "tool_name": "talon",
1714
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/talon.manual_bundle.txt",
1715
+ "run_help_command": false,
1716
+ "status": "success",
1717
+ "error": "",
1718
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_talon/app/talon_server.py",
1719
+ "dockerfile_ready": true
1720
+ },
1721
+ {
1722
+ "tool_name": "tirank",
1723
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/tirank.manual_bundle.txt",
1724
+ "run_help_command": false,
1725
+ "status": "success",
1726
+ "error": "",
1727
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_tirank/app/tirank_server.py",
1728
+ "dockerfile_ready": true
1729
+ },
1730
+ {
1731
+ "tool_name": "vitessce-python",
1732
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/vitessce-python.manual_bundle.txt",
1733
+ "run_help_command": false,
1734
+ "status": "skipped_existing",
1735
+ "error": "",
1736
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_vitessce-python/app/vitessce-python_server.py",
1737
+ "dockerfile_ready": true
1738
+ },
1739
+ {
1740
+ "tool_name": "vpt",
1741
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/vpt.manual_bundle.txt",
1742
+ "run_help_command": false,
1743
+ "status": "success",
1744
+ "error": "",
1745
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_vpt/app/vpt_server.py",
1746
+ "dockerfile_ready": true
1747
+ },
1748
+ {
1749
+ "tool_name": "wasp2",
1750
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/wasp2.manual_bundle.txt",
1751
+ "run_help_command": false,
1752
+ "status": "success",
1753
+ "error": "",
1754
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_wasp2/app/wasp2_server.py",
1755
+ "dockerfile_ready": true
1756
+ },
1757
+ {
1758
+ "tool_name": "xclone",
1759
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/xclone.manual_bundle.txt",
1760
+ "run_help_command": false,
1761
+ "status": "success",
1762
+ "error": "",
1763
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_xclone/app/xclone_server.py",
1764
+ "dockerfile_ready": true
1765
+ },
1766
+ {
1767
+ "tool_name": "zol",
1768
+ "manual": "/225040511/project/BioScientist/agent_system/toolbase/output/help_docs/manual_bundle_txt/zol.manual_bundle.txt",
1769
+ "run_help_command": false,
1770
+ "status": "success",
1771
+ "error": "",
1772
+ "output_file": "/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_zol/app/zol_server.py",
1773
+ "dockerfile_ready": true
1774
+ }
1775
+ ]
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.shard_0_of_4.json ADDED
The diff for this file is too large to render. See raw diff
 
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.shard_1_of_4.json ADDED
The diff for this file is too large to render. See raw diff
 
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.shard_2_of_4.json ADDED
The diff for this file is too large to render. See raw diff
 
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/conversion_report.shard_3_of_4.json ADDED
The diff for this file is too large to render. See raw diff
 
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.10-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y default-jre wget curl && apt-get clean && rm -rf /var/lib/apt/lists/*
6
+
7
+ # Install Miniconda
8
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && bash /tmp/miniconda.sh -b -p /opt/conda && rm /tmp/miniconda.sh
9
+
10
+ # Add conda to PATH
11
+ ENV PATH="/opt/conda/bin:$PATH"
12
+
13
+ # Install abundancebin via conda (e.g., from bioconda)
14
+ RUN conda install -c bioconda abundancebin -y && conda clean -a
15
+
16
+ # Install Python dependencies
17
+ RUN pip install uv
18
+ RUN uv pip install --system fastmcp
19
+
20
+ # Create app directory
21
+ WORKDIR /app
22
+
23
+ # Copy your MCP server
24
+ COPY app/abundancebin_server.py /app/
25
+
26
+ # Create workspace and output directories
27
+ RUN mkdir -p /app/workspace /app/output
28
+
29
+ # Make sure the server script is executable
30
+ RUN chmod +x /app/abundancebin_server.py
31
+
32
+ # Expose port for MCP over HTTP (optional)
33
+ EXPOSE 8000
34
+
35
+ # Health check
36
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD python -c "import sys; sys.exit(0)"
37
+
38
+ # Default command runs the MCP server via stdio
39
+ CMD ["python", "/app/abundancebin_server.py"]
40
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/app/abundancebin_server.py ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import tempfile
3
+ from pathlib import Path
4
+ from typing import Optional, List
5
+
6
+ # This is a placeholder for the MCP decorator.
7
+ # In a real MCP environment, this would be imported from the MCP library.
8
+ def tool(*args, **kwargs):
9
+ def decorator(f):
10
+ return f
11
+ return decorator
12
+
13
+ mcp = type("mcp", (), {"tool": tool})
14
+
15
+
16
+ @mcp.tool()
17
+ def abundancebin(
18
+ input_file: Path,
19
+ kmer_len: int = 20,
20
+ output: Optional[Path] = None,
21
+ exclude: Optional[int] = None,
22
+ exclude_max: Optional[int] = None,
23
+ output_fasta: bool = False,
24
+ bin_num: Optional[int] = None,
25
+ recursive_classification: bool = False,
26
+ ):
27
+ """
28
+ Bins sequences based on k-mer composition and abundance.
29
+
30
+ This tool can either classify sequences into a predefined number of bins
31
+ or use a recursive classification approach.
32
+
33
+ Args:
34
+ input_file: Path to the input filename.
35
+ kmer_len: Composition length (k-mer size). Defaults to 20.
36
+ output: Path to the output file. Defaults to inputfile.log.
37
+ exclude: Exclude sequences with a count below this value.
38
+ exclude_max: Exclude sequences with a count above this value.
39
+ output_fasta: If set, output results in FASTA format.
40
+ bin_num: The number of bins to classify sequences into.
41
+ recursive_classification: If set, undergo recursive classification.
42
+ Cannot be used with bin_num.
43
+
44
+ Returns:
45
+ A dictionary containing the command executed, stdout, stderr, and a list of output files.
46
+ """
47
+ # --- Input Validation ---
48
+ if not input_file.is_file():
49
+ raise FileNotFoundError(f"Input file not found: {input_file}")
50
+
51
+ if kmer_len <= 0:
52
+ raise ValueError("kmer_len must be a positive integer.")
53
+
54
+ if exclude is not None and exclude < 0:
55
+ raise ValueError("The 'exclude' count must be a non-negative integer.")
56
+
57
+ if exclude_max is not None and exclude_max < 0:
58
+ raise ValueError("The 'exclude_max' count must be a non-negative integer.")
59
+
60
+ if bin_num is not None and bin_num <= 0:
61
+ raise ValueError("The 'bin_num' must be a positive integer.")
62
+
63
+ if bin_num is not None and recursive_classification:
64
+ raise ValueError(
65
+ "Cannot specify both 'bin_num' and 'recursive_classification'. "
66
+ "Please choose one method for classification."
67
+ )
68
+
69
+ # --- Command Construction ---
70
+ cmd = ["abundancebin"]
71
+
72
+ cmd.extend(["-input", str(input_file)])
73
+
74
+ # Handle default output file path
75
+ if output:
76
+ output_path = output
77
+ else:
78
+ output_path = input_file.with_suffix('.log')
79
+
80
+ cmd.extend(["-output", str(output_path)])
81
+
82
+ cmd.extend(["-kmer_len", str(kmer_len)])
83
+
84
+ if exclude is not None:
85
+ cmd.extend(["-exclude", str(exclude)])
86
+
87
+ if exclude_max is not None:
88
+ cmd.extend(["-exclude_max", str(exclude_max)])
89
+
90
+ if output_fasta:
91
+ cmd.append("-OUTPUT_FASTA")
92
+
93
+ if bin_num is not None:
94
+ cmd.extend(["-bin_num", str(bin_num)])
95
+
96
+ if recursive_classification:
97
+ cmd.append("-RECURSIVE_CLASSIFICATION")
98
+
99
+ command_executed = " ".join(cmd)
100
+
101
+ # --- Subprocess Execution ---
102
+ try:
103
+ result = subprocess.run(
104
+ cmd,
105
+ capture_output=True,
106
+ text=True,
107
+ check=True
108
+ )
109
+ stdout = result.stdout
110
+ stderr = result.stderr
111
+ except FileNotFoundError:
112
+ return {
113
+ "command_executed": command_executed,
114
+ "stdout": "",
115
+ "stderr": "Error: 'abundancebin' command not found. Make sure it is installed and in your PATH.",
116
+ "output_files": []
117
+ }
118
+ except subprocess.CalledProcessError as e:
119
+ return {
120
+ "command_executed": command_executed,
121
+ "stdout": e.stdout,
122
+ "stderr": e.stderr,
123
+ "output_files": []
124
+ }
125
+
126
+ # --- Structured Result Return ---
127
+ output_files = [str(output_path)] if output_path.exists() else []
128
+
129
+ return {
130
+ "command_executed": command_executed,
131
+ "stdout": stdout,
132
+ "stderr": stderr,
133
+ "output_files": output_files
134
+ }
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/app/abundancebin_shim_server.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/app/abundancebin_server.py')
11
+ SERVER_NAME = 'biosci_abundancebin'
12
+
13
+
14
+ class _ShimMCP:
15
+ @staticmethod
16
+ def tool():
17
+ def _decorator(fn):
18
+ return fn
19
+ return _decorator
20
+
21
+
22
+ def _load_functions():
23
+ code = SOURCE_SERVER.read_text(encoding="utf-8")
24
+ tree = ast.parse(code, filename=str(SOURCE_SERVER))
25
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
26
+ namespace = {
27
+ "__name__": "__mcp_source__",
28
+ "mcp": _ShimMCP(),
29
+ }
30
+ exec(compile(code, str(SOURCE_SERVER), "exec"), namespace, namespace)
31
+ loaded = []
32
+ for name in function_names:
33
+ fn = namespace.get(name)
34
+ if callable(fn):
35
+ loaded.append(fn)
36
+ return loaded
37
+
38
+
39
+ mcp = FastMCP(SERVER_NAME)
40
+ for _fn in _load_functions():
41
+ mcp.tool()(_fn)
42
+
43
+
44
+ if __name__ == "__main__":
45
+ mcp.run(transport="stdio")
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/app/requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-abundancebin:
5
+ build: .
6
+ image: mcp-abundancebin:latest
7
+ container_name: mcp-abundancebin
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=abundancebin
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/environment.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ name: mcp-tool
3
+ channels:
4
+ - bioconda
5
+ - conda-forge
6
+ - defaults
7
+ dependencies:
8
+ - abundancebin
9
+ - python=3.10
10
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_abundancebin/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ fastmcp
2
+ mcp
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anarci/app/anarci_server.py ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pathlib import Path
2
+ import subprocess
3
+ from typing import Optional, List, Union
4
+
5
+ @mcp.tool()
6
+ def run_anarci(
7
+ sequence: Optional[str] = None,
8
+ input_file: Optional[str] = None,
9
+ output_file: Optional[str] = None,
10
+ scheme: str = "imgt",
11
+ restrict: Optional[str] = None,
12
+ species: Optional[str] = None,
13
+ csv: bool = False,
14
+ ncpu: int = 1,
15
+ bit_score_threshold: float = 80.0,
16
+ assign_germline: bool = False,
17
+ name: Optional[str] = None,
18
+ verbose: bool = False
19
+ ):
20
+ """
21
+ ANARCI: Antibody Numbering and Antigen Receptor ClassIfication.
22
+ Numbers amino-acid sequences of antibody and T-cell receptor variable domains.
23
+
24
+ Args:
25
+ sequence: A single amino acid sequence to number.
26
+ input_file: Path to a FASTA file containing sequences to number.
27
+ output_file: Path to the output file. If not provided, results are printed to stdout.
28
+ scheme: Numbering scheme to use. Options: 'imgt', 'kabat', 'chothia', 'martin', 'aho'. (Default: 'imgt')
29
+ restrict: Restrict numbering to specific domain types. Options: 'ig' (immunoglobulins), 'tr' (T-cell receptors).
30
+ species: Restrict germline search to specific species (e.g., 'human', 'mouse', 'rat', 'rabbit', 'rhesus', 'pig', 'alpaca').
31
+ csv: If True, output results in CSV format (horizontal). If False, uses plain text (vertical).
32
+ ncpu: Number of CPUs to use for parallel processing. (Default: 1)
33
+ bit_score_threshold: HMMER bit score threshold for domain identification. (Default: 80.0)
34
+ assign_germline: If True, assign germline species and gene information.
35
+ name: Name to assign to the single sequence (used with 'sequence' parameter).
36
+ verbose: If True, produce verbose output.
37
+ """
38
+
39
+ # Input validation
40
+ if not sequence and not input_file:
41
+ raise ValueError("Either 'sequence' or 'input_file' must be provided.")
42
+
43
+ if sequence and input_file:
44
+ raise ValueError("Provide either 'sequence' or 'input_file', not both.")
45
+
46
+ valid_schemes = ["imgt", "kabat", "chothia", "martin", "aho"]
47
+ if scheme.lower() not in valid_schemes:
48
+ raise ValueError(f"Invalid scheme '{scheme}'. Must be one of {valid_schemes}")
49
+
50
+ if restrict and restrict.lower() not in ["ig", "tr"]:
51
+ raise ValueError("Restrict must be either 'ig' or 'tr'.")
52
+
53
+ # Build command
54
+ # The CLI tool is typically named 'ANARCI' (uppercase)
55
+ cmd = ["ANARCI"]
56
+
57
+ if sequence:
58
+ cmd.extend(["--sequence", sequence])
59
+ if name:
60
+ cmd.extend(["--name", name])
61
+
62
+ if input_file:
63
+ input_path = Path(input_file)
64
+ if not input_path.exists():
65
+ raise FileNotFoundError(f"Input file not found: {input_file}")
66
+ cmd.extend(["--input", str(input_path)])
67
+
68
+ if output_file:
69
+ cmd.extend(["--outfile", output_file])
70
+
71
+ cmd.extend(["--scheme", scheme.lower()])
72
+
73
+ if restrict:
74
+ cmd.extend(["--restrict", restrict.lower()])
75
+
76
+ if species:
77
+ cmd.extend(["--species", species.lower()])
78
+
79
+ if csv:
80
+ cmd.append("--csv")
81
+
82
+ if assign_germline:
83
+ cmd.append("--assign_germline")
84
+
85
+ if verbose:
86
+ cmd.append("--verbose")
87
+
88
+ cmd.extend(["--ncpu", str(ncpu)])
89
+ cmd.extend(["--bit_score_threshold", str(bit_score_threshold)])
90
+
91
+ try:
92
+ # Execute the tool
93
+ result = subprocess.run(
94
+ cmd,
95
+ capture_output=True,
96
+ text=True,
97
+ check=True
98
+ )
99
+
100
+ output_files = []
101
+ if output_file:
102
+ # ANARCI often appends suffixes depending on the format
103
+ # e.g., .csv or .txt
104
+ actual_output = Path(output_file)
105
+ if actual_output.exists():
106
+ output_files.append(str(actual_output))
107
+ else:
108
+ # Check for common suffixes if the exact file isn't found
109
+ for suffix in [".csv", ".txt"]:
110
+ p = Path(f"{output_file}{suffix}")
111
+ if p.exists():
112
+ output_files.append(str(p))
113
+
114
+ return {
115
+ "command_executed": " ".join(cmd),
116
+ "stdout": result.stdout,
117
+ "stderr": result.stderr,
118
+ "output_files": output_files
119
+ }
120
+
121
+ except subprocess.CalledProcessError as e:
122
+ return {
123
+ "command_executed": " ".join(cmd),
124
+ "stdout": e.stdout,
125
+ "stderr": e.stderr,
126
+ "error": f"ANARCI failed with return code {e.returncode}"
127
+ }
128
+ except Exception as e:
129
+ return {
130
+ "command_executed": " ".join(cmd),
131
+ "error": str(e)
132
+ }
133
+
134
+ @mcp.tool()
135
+ def list_anarci_species():
136
+ """
137
+ Returns a list of species supported by ANARCI for germline alignment.
138
+ Note: This is an informational tool based on ANARCI's standard database.
139
+ """
140
+ # Standard species supported by ANARCI
141
+ species_list = [
142
+ "human", "mouse", "rat", "rabbit", "rhesus", "pig", "alpaca",
143
+ "dog", "chicken", "cow", "horse", "monkey", "macaque"
144
+ ]
145
+
146
+ return {
147
+ "supported_species": species_list,
148
+ "note": "Availability may depend on the specific ANARCI version and installed HMM databases."
149
+ }
150
+
151
+ @mcp.tool()
152
+ def get_anarci_version():
153
+ """
154
+ Retrieves the version information for the installed ANARCI tool.
155
+ """
156
+ try:
157
+ # ANARCI doesn't always have a simple --version flag in older versions,
158
+ # but we can try to run it to see the help header or use pip/conda info.
159
+ # Most modern versions support --version.
160
+ result = subprocess.run(
161
+ ["ANARCI", "--version"],
162
+ capture_output=True,
163
+ text=True,
164
+ check=False
165
+ )
166
+
167
+ # If --version fails, try to get it from the help output
168
+ if result.returncode != 0:
169
+ result = subprocess.run(
170
+ ["ANARCI", "--help"],
171
+ capture_output=True,
172
+ text=True,
173
+ check=False
174
+ )
175
+
176
+ return {
177
+ "stdout": result.stdout,
178
+ "stderr": result.stderr
179
+ }
180
+ except Exception as e:
181
+ return {
182
+ "error": f"Could not determine ANARCI version: {str(e)}"
183
+ }
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anarci/app/anarci_shim_server.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anarci/app/anarci_server.py')
11
+ SERVER_NAME = 'biosci_anarci'
12
+
13
+
14
+ class _ShimMCP:
15
+ @staticmethod
16
+ def tool():
17
+ def _decorator(fn):
18
+ return fn
19
+ return _decorator
20
+
21
+
22
+ def _load_functions():
23
+ code = SOURCE_SERVER.read_text(encoding="utf-8")
24
+ tree = ast.parse(code, filename=str(SOURCE_SERVER))
25
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
26
+ namespace = {
27
+ "__name__": "__mcp_source__",
28
+ "mcp": _ShimMCP(),
29
+ }
30
+ exec(compile(code, str(SOURCE_SERVER), "exec"), namespace, namespace)
31
+ loaded = []
32
+ for name in function_names:
33
+ fn = namespace.get(name)
34
+ if callable(fn):
35
+ loaded.append(fn)
36
+ return loaded
37
+
38
+
39
+ mcp = FastMCP(SERVER_NAME)
40
+ for _fn in _load_functions():
41
+ mcp.tool()(_fn)
42
+
43
+
44
+ if __name__ == "__main__":
45
+ mcp.run(transport="stdio")
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anarci/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-anarci:
5
+ build: .
6
+ image: mcp-anarci:latest
7
+ container_name: mcp-anarci
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=anarci
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_anarci/environment.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ name: mcp-tool
3
+ channels:
4
+ - bioconda
5
+ - conda-forge
6
+ - defaults
7
+ dependencies:
8
+ - anarci
9
+ - python=3.10
10
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.10-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y default-jre wget curl && apt-get clean && rm -rf /var/lib/apt/lists/*
6
+
7
+ # Install Miniconda
8
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && bash /tmp/miniconda.sh -b -p /opt/conda && rm /tmp/miniconda.sh
9
+
10
+ # Add conda to PATH
11
+ ENV PATH="/opt/conda/bin:$PATH"
12
+
13
+ # Install ariba via conda (e.g., from bioconda)
14
+ RUN conda install -c bioconda ariba -y && conda clean -a
15
+
16
+ # Install Python dependencies
17
+ RUN pip install uv
18
+ RUN uv pip install --system fastmcp
19
+
20
+ # Create app directory
21
+ WORKDIR /app
22
+
23
+ # Copy your MCP server
24
+ COPY app/ariba_server.py /app/
25
+
26
+ # Create workspace and output directories
27
+ RUN mkdir -p /app/workspace /app/output
28
+
29
+ # Make sure the server script is executable
30
+ RUN chmod +x /app/ariba_server.py
31
+
32
+ # Expose port for MCP over HTTP (optional)
33
+ EXPOSE 8000
34
+
35
+ # Health check
36
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD python -c "import sys; sys.exit(0)"
37
+
38
+ # Default command runs the MCP server via stdio
39
+ CMD ["python", "/app/ariba_server.py"]
40
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/app/requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-ariba:
5
+ build: .
6
+ image: mcp-ariba:latest
7
+ container_name: mcp-ariba
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=ariba
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/environment.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ name: mcp-tool
3
+ channels:
4
+ - bioconda
5
+ - conda-forge
6
+ - defaults
7
+ dependencies:
8
+ - ariba
9
+ - python=3.10
10
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_ariba/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ fastmcp
2
+ mcp
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.10-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y default-jre wget curl && apt-get clean && rm -rf /var/lib/apt/lists/*
6
+
7
+ # Install Miniconda
8
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && bash /tmp/miniconda.sh -b -p /opt/conda && rm /tmp/miniconda.sh
9
+
10
+ # Add conda to PATH
11
+ ENV PATH="/opt/conda/bin:$PATH"
12
+
13
+ # Install bioconductor-alabaster.spatial via conda (e.g., from bioconda)
14
+ RUN conda install -c bioconda bioconductor-alabaster.spatial -y && conda clean -a
15
+
16
+ # Install Python dependencies
17
+ RUN pip install uv
18
+ RUN uv pip install --system fastmcp
19
+
20
+ # Create app directory
21
+ WORKDIR /app
22
+
23
+ # Copy your MCP server
24
+ COPY app/bioconductor-alabaster.spatial_server.py /app/
25
+
26
+ # Create workspace and output directories
27
+ RUN mkdir -p /app/workspace /app/output
28
+
29
+ # Make sure the server script is executable
30
+ RUN chmod +x /app/bioconductor-alabaster.spatial_server.py
31
+
32
+ # Expose port for MCP over HTTP (optional)
33
+ EXPOSE 8000
34
+
35
+ # Health check
36
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD python -c "import sys; sys.exit(0)"
37
+
38
+ # Default command runs the MCP server via stdio
39
+ CMD ["python", "/app/bioconductor-alabaster.spatial_server.py"]
40
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/app/bioconductor-alabaster.spatial_server.py ADDED
@@ -0,0 +1,289 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import tempfile
3
+ import os
4
+ from pathlib import Path
5
+ from typing import Optional, List, Dict, Any
6
+
7
+ # No need to import mcp as per instructions.
8
+
9
+ def _run_r_script(script_content: str, cwd: Path) -> Dict[str, Any]:
10
+ """
11
+ Executes an R script and captures its output.
12
+
13
+ Args:
14
+ script_content: The R script as a string.
15
+ cwd: The current working directory for the R script execution.
16
+
17
+ Returns:
18
+ A dictionary containing execution details, including command, stdout, stderr,
19
+ and an error message if the script fails.
20
+ """
21
+ with tempfile.NamedTemporaryFile(mode="w", suffix=".R", delete=False) as r_script_file:
22
+ r_script_file.write(script_content)
23
+ r_script_path = Path(r_script_file.name)
24
+
25
+ command = ["Rscript", str(r_script_path)]
26
+
27
+ stdout = ""
28
+ stderr = ""
29
+ try:
30
+ process = subprocess.run(
31
+ command,
32
+ capture_output=True,
33
+ text=True,
34
+ check=True,
35
+ cwd=cwd # Run R script in the specified working directory
36
+ )
37
+ stdout = process.stdout
38
+ stderr = process.stderr
39
+ except subprocess.CalledProcessError as e:
40
+ return {
41
+ "command_executed": " ".join(command),
42
+ "stdout": e.stdout,
43
+ "stderr": e.stderr,
44
+ "error": f"R script execution failed with exit code {e.returncode}",
45
+ "output_files": [],
46
+ }
47
+ finally:
48
+ os.remove(r_script_path)
49
+
50
+ return {
51
+ "command_executed": " ".join(command),
52
+ "stdout": stdout,
53
+ "stderr": stderr,
54
+ "output_files": [], # This will be populated by the calling function
55
+ }
56
+
57
+ @mcp.tool()
58
+ def save_spatial_experiment(
59
+ input_spatial_experiment_rds: Path,
60
+ output_directory: Path,
61
+ precomputed: bool = True,
62
+ deferred: bool = False,
63
+ compression_level: Optional[int] = None,
64
+ compression_filter: Optional[str] = None,
65
+ ) -> Dict[str, Any]:
66
+ """
67
+ Saves a SpatialExperiment object and its images into file artifacts.
68
+
69
+ This function serializes an R SpatialExperiment object (provided as an RDS file)
70
+ into a directory structure of file artifacts, offering a portable alternative
71
+ to direct RDS serialization. The `alabaster.spatial` package handles the
72
+ conversion and storage of the object and its associated images.
73
+
74
+ Args:
75
+ input_spatial_experiment_rds: Path to an RDS file containing the SpatialExperiment object.
76
+ This file must exist.
77
+ output_directory: Path to the directory where the file artifacts will be saved.
78
+ This directory will be created if it does not exist.
79
+ precomputed: Logical, whether to save precomputed results. Defaults to TRUE.
80
+ deferred: Logical, whether to defer saving of certain components. Defaults to FALSE.
81
+ compression_level: Integer, compression level for HDF5 files (0-9).
82
+ If None, R's default (typically 6) will be used.
83
+ compression_filter: String, compression filter for HDF5 files (e.g., "gzip", "lzf").
84
+ If None, no specific filter is applied.
85
+
86
+ Returns:
87
+ A dictionary containing execution details, including the command executed,
88
+ stdout, stderr, and a list of generated output files/directories.
89
+ Returns an error if input file is not found, output path is invalid,
90
+ compression_level is out of range, or R script execution fails.
91
+ """
92
+ # Input validation
93
+ if not input_spatial_experiment_rds.is_file():
94
+ return {
95
+ "command_executed": "",
96
+ "stdout": "",
97
+ "stderr": f"Error: Input RDS file not found at '{input_spatial_experiment_rds}'",
98
+ "output_files": [],
99
+ }
100
+
101
+ if output_directory.exists() and not output_directory.is_dir():
102
+ return {
103
+ "command_executed": "",
104
+ "stdout": "",
105
+ "stderr": f"Error: Output path '{output_directory}' exists but is not a directory.",
106
+ "output_files": [],
107
+ }
108
+
109
+ try:
110
+ output_directory.mkdir(parents=True, exist_ok=True)
111
+ except OSError as e:
112
+ return {
113
+ "command_executed": "",
114
+ "stdout": "",
115
+ "stderr": f"Error: Could not create output directory '{output_directory}': {e}",
116
+ "output_files": [],
117
+ }
118
+
119
+ if compression_level is not None and not (0 <= compression_level <= 9):
120
+ return {
121
+ "command_executed": "",
122
+ "stdout": "",
123
+ "stderr": f"Error: 'compression_level' must be an integer between 0 and 9, got {compression_level}",
124
+ "output_files": [],
125
+ }
126
+
127
+ # Construct R script
128
+ r_script_template = """
129
+ suppressPackageStartupMessages({{
130
+ library(alabaster.spatial)
131
+ library(SpatialExperiment)
132
+ library(S4Vectors)
133
+ library(alabaster.base)
134
+ library(rhdf5) # Explicitly load for HDF5 operations
135
+ }})
136
+
137
+ input_rds_path <- "{input_rds_path}"
138
+ output_dir_path <- "{output_dir_path}"
139
+
140
+ # Load the SpatialExperiment object
141
+ if (!file.exists(input_rds_path)) {{
142
+ stop(paste0("Input RDS file not found: ", input_rds_path))
143
+ }}
144
+ se_object <- readRDS(input_rds_path)
145
+
146
+ # Ensure it's a SpatialExperiment object
147
+ if (!is(se_object, "SpatialExperiment")) {{
148
+ stop("Loaded object is not a SpatialExperiment object.")
149
+ }}
150
+
151
+ # Prepare additional arguments for saveObject
152
+ save_args <- list(
153
+ x = se_object,
154
+ path = output_dir_path,
155
+ precomputed = {precomputed_r},
156
+ deferred = {deferred_r}
157
+ )
158
+ {compression_level_r}
159
+ {compression_filter_r}
160
+
161
+ # Call saveObject
162
+ do.call(alabaster.spatial::saveObject, save_args)
163
+
164
+ message(paste0("SpatialExperiment object saved to: ", output_dir_path))
165
+ """
166
+
167
+ compression_level_r = f"save_args$compression_level <- {compression_level}" if compression_level is not None else ""
168
+ compression_filter_r = f"save_args$compression_filter <- '{compression_filter}'" if compression_filter is not None else ""
169
+
170
+ r_script_content = r_script_template.format(
171
+ input_rds_path=input_spatial_experiment_rds.resolve(),
172
+ output_dir_path=output_directory.resolve(),
173
+ precomputed_r=str(precomputed).upper(),
174
+ deferred_r=str(deferred).upper(),
175
+ compression_level_r=compression_level_r,
176
+ compression_filter_r=compression_filter_r,
177
+ )
178
+
179
+ # Execute R script
180
+ result = _run_r_script(r_script_content, output_directory.parent) # Run in parent dir to allow output_directory creation
181
+ if "error" in result:
182
+ return result
183
+
184
+ result["output_files"] = [str(output_directory.resolve())]
185
+ return result
186
+
187
+
188
+ @mcp.tool()
189
+ def read_spatial_experiment(
190
+ input_directory: Path,
191
+ output_spatial_experiment_rds: Path,
192
+ metadata_only: bool = False,
193
+ image_format: Optional[str] = None,
194
+ ) -> Dict[str, Any]:
195
+ """
196
+ Loads a SpatialExperiment object and its images from file artifacts.
197
+
198
+ This function reconstructs an R SpatialExperiment object from a directory
199
+ of file artifacts previously saved by `save_spatial_experiment`.
200
+
201
+ Args:
202
+ input_directory: Path to the directory containing the file artifacts.
203
+ This directory must exist and be valid.
204
+ output_spatial_experiment_rds: Path to the output RDS file where the
205
+ reconstructed SpatialExperiment object will be saved.
206
+ The parent directory will be created if it does not exist.
207
+ metadata_only: Logical, whether to only load metadata and not the full data.
208
+ Defaults to FALSE.
209
+ image_format: String, desired image format for loading (e.g., "png", "jpeg", "tiff").
210
+ If None, images are loaded in their original format.
211
+
212
+ Returns:
213
+ A dictionary containing execution details, including the command executed,
214
+ stdout, stderr, and a list of generated output files.
215
+ Returns an error if input directory is not found, output path is invalid,
216
+ or R script execution fails.
217
+ """
218
+ # Input validation
219
+ if not input_directory.is_dir():
220
+ return {
221
+ "command_executed": "",
222
+ "stdout": "",
223
+ "stderr": f"Error: Input directory not found at '{input_directory}'",
224
+ "output_files": [],
225
+ }
226
+
227
+ if output_spatial_experiment_rds.exists() and not output_spatial_experiment_rds.is_file():
228
+ return {
229
+ "command_executed": "",
230
+ "stdout": "",
231
+ "stderr": f"Error: Output path '{output_spatial_experiment_rds}' exists but is not a file.",
232
+ "output_files": [],
233
+ }
234
+
235
+ try:
236
+ output_spatial_experiment_rds.parent.mkdir(parents=True, exist_ok=True)
237
+ except OSError as e:
238
+ return {
239
+ "command_executed": "",
240
+ "stdout": "",
241
+ "stderr": f"Error: Could not create parent directory for output RDS file '{output_spatial_experiment_rds}': {e}",
242
+ "output_files": [],
243
+ }
244
+
245
+ # Construct R script
246
+ r_script_template = """
247
+ suppressPackageStartupMessages({{
248
+ library(alabaster.spatial)
249
+ library(SpatialExperiment)
250
+ library(S4Vectors)
251
+ library(alabaster.base)
252
+ library(rhdf5) # Explicitly load for HDF5 operations
253
+ }})
254
+
255
+ input_dir_path <- "{input_dir_path}"
256
+ output_rds_path <- "{output_rds_path}"
257
+
258
+ # Prepare additional arguments for readObject
259
+ read_args <- list(
260
+ path = input_dir_path,
261
+ metadata.only = {metadata_only_r}
262
+ )
263
+ {image_format_r}
264
+
265
+ # Call readObject
266
+ se_object <- do.call(alabaster.spatial::readObject, read_args)
267
+
268
+ # Save the SpatialExperiment object to RDS
269
+ saveRDS(se_object, file = output_rds_path)
270
+
271
+ message(paste0("SpatialExperiment object loaded from: ", input_dir_path, " and saved to: ", output_rds_path))
272
+ """
273
+
274
+ image_format_r = f"read_args$image.format <- '{image_format}'" if image_format is not None else ""
275
+
276
+ r_script_content = r_script_template.format(
277
+ input_dir_path=input_directory.resolve(),
278
+ output_rds_path=output_spatial_experiment_rds.resolve(),
279
+ metadata_only_r=str(metadata_only).upper(),
280
+ image_format_r=image_format_r,
281
+ )
282
+
283
+ # Execute R script
284
+ result = _run_r_script(r_script_content, output_spatial_experiment_rds.parent)
285
+ if "error" in result:
286
+ return result
287
+
288
+ result["output_files"] = [str(output_spatial_experiment_rds.resolve())]
289
+ return result
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/app/bioconductor-alabaster.spatial_shim_server.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/app/bioconductor-alabaster.spatial_server.py')
11
+ SERVER_NAME = 'biosci_bioconductor_alabaster_spatial'
12
+
13
+
14
+ class _ShimMCP:
15
+ @staticmethod
16
+ def tool():
17
+ def _decorator(fn):
18
+ return fn
19
+ return _decorator
20
+
21
+
22
+ def _load_functions():
23
+ code = SOURCE_SERVER.read_text(encoding="utf-8")
24
+ tree = ast.parse(code, filename=str(SOURCE_SERVER))
25
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
26
+ namespace = {
27
+ "__name__": "__mcp_source__",
28
+ "mcp": _ShimMCP(),
29
+ }
30
+ exec(compile(code, str(SOURCE_SERVER), "exec"), namespace, namespace)
31
+ loaded = []
32
+ for name in function_names:
33
+ fn = namespace.get(name)
34
+ if callable(fn):
35
+ loaded.append(fn)
36
+ return loaded
37
+
38
+
39
+ mcp = FastMCP(SERVER_NAME)
40
+ for _fn in _load_functions():
41
+ mcp.tool()(_fn)
42
+
43
+
44
+ if __name__ == "__main__":
45
+ mcp.run(transport="stdio")
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-bioconductor-alabaster.spatial:
5
+ build: .
6
+ image: mcp-bioconductor-alabaster.spatial:latest
7
+ container_name: mcp-bioconductor-alabaster.spatial
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=bioconductor-alabaster.spatial
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/environment.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ name: mcp-tool
3
+ channels:
4
+ - bioconda
5
+ - conda-forge
6
+ - defaults
7
+ dependencies:
8
+ - bioconductor-alabaster.spatial
9
+ - python=3.10
10
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-alabaster.spatial/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ fastmcp
2
+ mcp
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-annotationhub/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ fastmcp
2
+ mcp
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.10-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y default-jre wget curl && apt-get clean && rm -rf /var/lib/apt/lists/*
6
+
7
+ # Install Miniconda
8
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && bash /tmp/miniconda.sh -b -p /opt/conda && rm /tmp/miniconda.sh
9
+
10
+ # Add conda to PATH
11
+ ENV PATH="/opt/conda/bin:$PATH"
12
+
13
+ # Install bioconductor-awaggregator via conda (e.g., from bioconda)
14
+ RUN conda install -c bioconda bioconductor-awaggregator -y && conda clean -a
15
+
16
+ # Install Python dependencies
17
+ RUN pip install uv
18
+ RUN uv pip install --system fastmcp
19
+
20
+ # Create app directory
21
+ WORKDIR /app
22
+
23
+ # Copy your MCP server
24
+ COPY app/bioconductor-awaggregator_server.py /app/
25
+
26
+ # Create workspace and output directories
27
+ RUN mkdir -p /app/workspace /app/output
28
+
29
+ # Make sure the server script is executable
30
+ RUN chmod +x /app/bioconductor-awaggregator_server.py
31
+
32
+ # Expose port for MCP over HTTP (optional)
33
+ EXPOSE 8000
34
+
35
+ # Health check
36
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD python -c "import sys; sys.exit(0)"
37
+
38
+ # Default command runs the MCP server via stdio
39
+ CMD ["python", "/app/bioconductor-awaggregator_server.py"]
40
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/app/bioconductor-awaggregator_server.py ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ from pathlib import Path
3
+ from typing import Dict, List
4
+
5
+ # MCP decorator is assumed to be available in the execution environment.
6
+ # No import is needed as per the instructions.
7
+ # class mcp:
8
+ # @staticmethod
9
+ # def tool():
10
+ # def decorator(func):
11
+ # return func
12
+ # return decorator
13
+
14
+
15
+ def _run_awaggregator_cli(cmd: List[str], output_map: Dict[str, Path]) -> Dict:
16
+ """
17
+ A private helper function to execute the awaggregator wrapper script,
18
+ handle subprocess execution, and format the output.
19
+ """
20
+ command_executed = " ".join(map(str, cmd))
21
+ try:
22
+ result = subprocess.run(
23
+ cmd,
24
+ capture_output=True,
25
+ text=True,
26
+ check=True,
27
+ )
28
+ return {
29
+ "command_executed": command_executed,
30
+ "stdout": result.stdout,
31
+ "stderr": result.stderr,
32
+ "output_files": {key: str(path) for key, path in output_map.items()},
33
+ }
34
+ except FileNotFoundError:
35
+ # This error is raised if 'Rscript' or the wrapper is not in PATH
36
+ return {
37
+ "command_executed": command_executed,
38
+ "stdout": "",
39
+ "stderr": "Error: 'Rscript' or the wrapper script 'run_awaggregator.R' not found. "
40
+ "Please ensure R and the tool's wrapper script are in the system's PATH.",
41
+ "output_files": {},
42
+ "error": "Executable not found."
43
+ }
44
+ except subprocess.CalledProcessError as e:
45
+ # This error is raised for non-zero exit codes from the tool
46
+ return {
47
+ "command_executed": command_executed,
48
+ "stdout": e.stdout,
49
+ "stderr": e.stderr,
50
+ "output_files": {},
51
+ "error": f"Tool execution failed with exit code {e.returncode}",
52
+ }
53
+
54
+
55
+ @mcp.tool()
56
+ def aw_weight(
57
+ expression_matrix: Path,
58
+ design_matrix: Path,
59
+ output_weights_file: Path,
60
+ ):
61
+ """
62
+ Computes adaptive weights for gene expression data meta-analysis.
63
+
64
+ This tool wraps the `aw.weight` function from the Bioconductor `awaggregator` package.
65
+ It takes an expression data matrix and a design matrix to compute weights for each study.
66
+ The resulting weights matrix can be used with the `aw_mean` or `aw_median` tools.
67
+
68
+ Args:
69
+ expression_matrix: Path to the input expression data matrix file (e.g., CSV, TSV).
70
+ Rows should represent genes and columns should represent samples.
71
+ design_matrix: Path to the input design matrix file (e.g., CSV, TSV).
72
+ This matrix describes the experimental design.
73
+ output_weights_file: Path to save the computed weights matrix.
74
+
75
+ Returns:
76
+ A dictionary containing the execution command, stdout, stderr, and a
77
+ path to the output weights file.
78
+ """
79
+ # --- Input Validation ---
80
+ if not expression_matrix.is_file():
81
+ raise FileNotFoundError(f"Input expression matrix file not found: {expression_matrix}")
82
+ if not design_matrix.is_file():
83
+ raise FileNotFoundError(f"Input design matrix file not found: {design_matrix}")
84
+
85
+ output_dir = output_weights_file.parent
86
+ if not output_dir.is_dir():
87
+ raise NotADirectoryError(f"Output directory does not exist: {output_dir}")
88
+
89
+ # --- Command Construction ---
90
+ # Assumes a wrapper script 'run_awaggregator.R' is available that handles CLI parsing.
91
+ cmd = [
92
+ "Rscript",
93
+ "run_awaggregator.R",
94
+ "--method",
95
+ "weight",
96
+ "--expression",
97
+ expression_matrix,
98
+ "--design",
99
+ design_matrix,
100
+ "--output",
101
+ output_weights_file,
102
+ ]
103
+
104
+ return _run_awaggregator_cli(cmd, {"weights_matrix": output_weights_file})
105
+
106
+
107
+ @mcp.tool()
108
+ def aw_mean(
109
+ data_matrix: Path,
110
+ weights_matrix: Path,
111
+ output_file: Path,
112
+ na_rm: bool = False,
113
+ ):
114
+ """
115
+ Performs adaptive-weighted mean aggregation on gene expression data.
116
+
117
+ This tool wraps the `aw.mean` function from the Bioconductor `awaggregator` package.
118
+ It takes a data matrix and a corresponding weights matrix to compute the weighted mean
119
+ for each gene (row) across studies (columns).
120
+
121
+ Args:
122
+ data_matrix: Path to the input data matrix file (e.g., CSV, TSV).
123
+ Rows should represent genes and columns should represent studies.
124
+ weights_matrix: Path to the input weights matrix file (e.g., CSV, TSV).
125
+ Must have the same dimensions as the data matrix.
126
+ output_file: Path to save the aggregated results.
127
+ na_rm: If True, NA values will be removed before computation. Defaults to False.
128
+
129
+ Returns:
130
+ A dictionary containing the execution command, stdout, stderr, and a
131
+ path to the output file.
132
+ """
133
+ # --- Input Validation ---
134
+ if not data_matrix.is_file():
135
+ raise FileNotFoundError(f"Input data matrix file not found: {data_matrix}")
136
+ if not weights_matrix.is_file():
137
+ raise FileNotFoundError(f"Input weights matrix file not found: {weights_matrix}")
138
+
139
+ output_dir = output_file.parent
140
+ if not output_dir.is_dir():
141
+ raise NotADirectoryError(f"Output directory does not exist: {output_dir}")
142
+
143
+ # --- Command Construction ---
144
+ cmd = [
145
+ "Rscript",
146
+ "run_awaggregator.R",
147
+ "--method",
148
+ "mean",
149
+ "--data",
150
+ data_matrix,
151
+ "--weights",
152
+ weights_matrix,
153
+ "--output",
154
+ output_file,
155
+ ]
156
+ if na_rm:
157
+ cmd.append("--na-rm")
158
+
159
+ return _run_awaggregator_cli(cmd, {"aggregated_data": output_file})
160
+
161
+
162
+ @mcp.tool()
163
+ def aw_median(
164
+ data_matrix: Path,
165
+ weights_matrix: Path,
166
+ output_file: Path,
167
+ na_rm: bool = False,
168
+ ):
169
+ """
170
+ Performs adaptive-weighted median aggregation on gene expression data.
171
+
172
+ This tool wraps the `aw.median` function from the Bioconductor `awaggregator` package.
173
+ It takes a data matrix and a corresponding weights matrix to compute the weighted median
174
+ for each gene (row) across studies (columns).
175
+
176
+ Args:
177
+ data_matrix: Path to the input data matrix file (e.g., CSV, TSV).
178
+ Rows should represent genes and columns should represent studies.
179
+ weights_matrix: Path to the input weights matrix file (e.g., CSV, TSV).
180
+ Must have the same dimensions as the data matrix.
181
+ output_file: Path to save the aggregated results.
182
+ na_rm: If True, NA values will be removed before computation. Defaults to False.
183
+
184
+ Returns:
185
+ A dictionary containing the execution command, stdout, stderr, and a
186
+ path to the output file.
187
+ """
188
+ # --- Input Validation ---
189
+ if not data_matrix.is_file():
190
+ raise FileNotFoundError(f"Input data matrix file not found: {data_matrix}")
191
+ if not weights_matrix.is_file():
192
+ raise FileNotFoundError(f"Input weights matrix file not found: {weights_matrix}")
193
+
194
+ output_dir = output_file.parent
195
+ if not output_dir.is_dir():
196
+ raise NotADirectoryError(f"Output directory does not exist: {output_dir}")
197
+
198
+ # --- Command Construction ---
199
+ cmd = [
200
+ "Rscript",
201
+ "run_awaggregator.R",
202
+ "--method",
203
+ "median",
204
+ "--data",
205
+ data_matrix,
206
+ "--weights",
207
+ weights_matrix,
208
+ "--output",
209
+ output_file,
210
+ ]
211
+ if na_rm:
212
+ cmd.append("--na-rm")
213
+
214
+ return _run_awaggregator_cli(cmd, {"aggregated_data": output_file})
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/app/bioconductor-awaggregator_shim_server.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/app/bioconductor-awaggregator_server.py')
11
+ SERVER_NAME = 'biosci_bioconductor_awaggregator'
12
+
13
+
14
+ class _ShimMCP:
15
+ @staticmethod
16
+ def tool():
17
+ def _decorator(fn):
18
+ return fn
19
+ return _decorator
20
+
21
+
22
+ def _load_functions():
23
+ code = SOURCE_SERVER.read_text(encoding="utf-8")
24
+ tree = ast.parse(code, filename=str(SOURCE_SERVER))
25
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
26
+ namespace = {
27
+ "__name__": "__mcp_source__",
28
+ "mcp": _ShimMCP(),
29
+ }
30
+ exec(compile(code, str(SOURCE_SERVER), "exec"), namespace, namespace)
31
+ loaded = []
32
+ for name in function_names:
33
+ fn = namespace.get(name)
34
+ if callable(fn):
35
+ loaded.append(fn)
36
+ return loaded
37
+
38
+
39
+ mcp = FastMCP(SERVER_NAME)
40
+ for _fn in _load_functions():
41
+ mcp.tool()(_fn)
42
+
43
+
44
+ if __name__ == "__main__":
45
+ mcp.run(transport="stdio")
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/app/requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-bioconductor-awaggregator:
5
+ build: .
6
+ image: mcp-bioconductor-awaggregator:latest
7
+ container_name: mcp-bioconductor-awaggregator
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=bioconductor-awaggregator
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/environment.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ name: mcp-tool
3
+ channels:
4
+ - bioconda
5
+ - conda-forge
6
+ - defaults
7
+ dependencies:
8
+ - bioconductor-awaggregator
9
+ - python=3.10
10
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-awaggregator/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ fastmcp
2
+ mcp
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-bsgenome/app/bioconductor-bsgenome_server.py ADDED
@@ -0,0 +1,270 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ from pathlib import Path
3
+ from typing import Optional, List, Dict, Any
4
+
5
+ # No need to import mcp as per instructions.
6
+
7
+ def _run_r_command(r_code: str) -> Dict[str, Any]:
8
+ """
9
+ Executes an R command using Rscript.
10
+
11
+ Args:
12
+ r_code: The R code string to execute.
13
+
14
+ Returns:
15
+ A dictionary containing command execution details, stdout, stderr, and any output files.
16
+ """
17
+ command = ["Rscript", "-e", r_code]
18
+ try:
19
+ process = subprocess.run(
20
+ command,
21
+ capture_output=True,
22
+ text=True,
23
+ check=True
24
+ )
25
+ return {
26
+ "command_executed": " ".join(command),
27
+ "stdout": process.stdout,
28
+ "stderr": process.stderr,
29
+ "output_files": [],
30
+ }
31
+ except subprocess.CalledProcessError as e:
32
+ return {
33
+ "command_executed": " ".join(command),
34
+ "stdout": e.stdout,
35
+ "stderr": e.stderr,
36
+ "error": str(e),
37
+ "output_files": [],
38
+ }
39
+ except FileNotFoundError:
40
+ return {
41
+ "command_executed": " ".join(command),
42
+ "stdout": "",
43
+ "stderr": "Error: Rscript command not found. Please ensure R is installed and in your PATH.",
44
+ "error": "Rscript not found",
45
+ "output_files": [],
46
+ }
47
+
48
+ @mcp.tool()
49
+ def install_bsgenome_base_package(
50
+ bioc_manager_repo: str = "https://bioconductor.org/packages/release/bioc",
51
+ ) -> Dict[str, Any]:
52
+ """
53
+ Installs the core 'BSgenome' R package and 'BiocManager' if not already present.
54
+
55
+ This function is a prerequisite for using BSgenome data packages or functionalities.
56
+ It ensures that the necessary R infrastructure is in place.
57
+
58
+ Args:
59
+ bioc_manager_repo: The Bioconductor repository URL to use for installation.
60
+ Defaults to the standard release repository.
61
+
62
+ Returns:
63
+ A dictionary containing command execution details, stdout, stderr, and any output files.
64
+ """
65
+ # Input validation
66
+ if not isinstance(bioc_manager_repo, str) or not bioc_manager_repo:
67
+ raise ValueError("Bioconductor repository URL must be a non-empty string.")
68
+
69
+ r_code = f"""
70
+ if (!require("BiocManager", quietly = TRUE)) {{
71
+ install.packages("BiocManager", repos="https://cloud.r-project.org")
72
+ }}
73
+ BiocManager::install("BSgenome", update=FALSE, ask=FALSE, siteRepos="{bioc_manager_repo}")
74
+ """
75
+ return _run_r_command(r_code)
76
+
77
+ @mcp.tool()
78
+ def install_bsgenome_data_package(
79
+ data_package_name: str,
80
+ bioc_manager_repo: str = "https://bioconductor.org/packages/release/bioc",
81
+ ) -> Dict[str, Any]:
82
+ """
83
+ Installs a specific BSgenome data package (e.g., 'BSgenome.Hsapiens.UCSC.hg38').
84
+
85
+ These data packages contain the actual genome sequences. The core 'BSgenome'
86
+ package must be installed first using `install_bsgenome_base_package`.
87
+
88
+ Args:
89
+ data_package_name: The exact name of the BSgenome data package to install
90
+ (e.g., "BSgenome.Hsapiens.UCSC.hg38").
91
+ bioc_manager_repo: The Bioconductor repository URL to use for installation.
92
+ Defaults to the standard release repository.
93
+
94
+ Returns:
95
+ A dictionary containing command execution details, stdout, stderr, and any output files.
96
+ """
97
+ # Input validation
98
+ if not isinstance(data_package_name, str) or not data_package_name:
99
+ raise ValueError("Data package name must be a non-empty string.")
100
+ if not data_package_name.startswith("BSgenome."):
101
+ raise ValueError(f"Invalid BSgenome data package name: '{data_package_name}'. "
102
+ "It should start with 'BSgenome.'.")
103
+ if not isinstance(bioc_manager_repo, str) or not bioc_manager_repo:
104
+ raise ValueError("Bioconductor repository URL must be a non-empty string.")
105
+
106
+ r_code = f"""
107
+ if (!require("BiocManager", quietly = TRUE)) {{
108
+ install.packages("BiocManager", repos="https://cloud.r-project.org")
109
+ }}
110
+ BiocManager::install("{data_package_name}", update=FALSE, ask=FALSE, siteRepos="{bioc_manager_repo}")
111
+ """
112
+ return _run_r_command(r_code)
113
+
114
+ @mcp.tool()
115
+ def get_genome_sequence(
116
+ data_package_name: str,
117
+ seqname: str,
118
+ start: int,
119
+ end: int,
120
+ masked: bool = False,
121
+ output_file: Optional[Path] = None,
122
+ ) -> Dict[str, Any]:
123
+ """
124
+ Retrieves a specific genomic sequence from an installed BSgenome data package.
125
+
126
+ The specified BSgenome data package must be installed prior to calling this function
127
+ using `install_bsgenome_data_package`.
128
+
129
+ Args:
130
+ data_package_name: The name of the installed BSgenome data package
131
+ (e.g., "BSgenome.Hsapiens.UCSC.hg38").
132
+ seqname: The name of the sequence (e.g., "chr1", "X").
133
+ start: The 1-based start coordinate of the sequence to retrieve. Must be a positive integer.
134
+ end: The 1-based end coordinate of the sequence to retrieve. Must be an integer
135
+ greater than or equal to start.
136
+ masked: If True, masked regions (e.g., repeats) will be returned as 'N's.
137
+ If False, the actual sequence will be returned. Defaults to False.
138
+ output_file: Optional path to a file where the retrieved sequence will be written.
139
+ If not provided, the sequence will be returned in stdout.
140
+
141
+ Returns:
142
+ A dictionary containing command execution details, stdout, stderr, and any output files.
143
+ """
144
+ # Input validation
145
+ if not isinstance(data_package_name, str) or not data_package_name:
146
+ raise ValueError("Data package name must be a non-empty string.")
147
+ if not data_package_name.startswith("BSgenome."):
148
+ raise ValueError(f"Invalid BSgenome data package name: '{data_package_name}'. "
149
+ "It should start with 'BSgenome.'.")
150
+ if not isinstance(seqname, str) or not seqname:
151
+ raise ValueError("Sequence name (seqname) must be a non-empty string.")
152
+ if not isinstance(start, int) or start <= 0:
153
+ raise ValueError("Start coordinate must be a positive integer.")
154
+ if not isinstance(end, int) or end < start:
155
+ raise ValueError("End coordinate must be an integer greater than or equal to the start coordinate.")
156
+ if not isinstance(masked, bool):
157
+ raise ValueError("Masked parameter must be a boolean.")
158
+ if output_file is not None and not isinstance(output_file, Path):
159
+ raise ValueError("Output file must be a Path object or None.")
160
+
161
+ # Prepare R code
162
+ r_masked_val = "TRUE" if masked else "FALSE"
163
+
164
+ if output_file:
165
+ output_file_path = Path(output_file)
166
+ # Ensure parent directory exists
167
+ output_file_path.parent.mkdir(parents=True, exist_ok=True)
168
+
169
+ # Modify R code to write to file
170
+ r_code = f"""
171
+ library({data_package_name})
172
+ genome_obj <- get(data_package_name)
173
+ seq <- getSeq(genome_obj, "{seqname}", start={start}, end={end}, masked={r_masked_val})
174
+ writeLines(as.character(seq), con="{output_file_path.resolve()}")
175
+ """
176
+ result = _run_r_command(r_code)
177
+ if "error" not in result:
178
+ result["output_files"].append(str(output_file_path.resolve()))
179
+ return result
180
+ else:
181
+ r_code = f"""
182
+ library({data_package_name})
183
+ genome_obj <- get(data_package_name)
184
+ seq <- getSeq(genome_obj, "{seqname}", start={start}, end={end}, masked={r_masked_val})
185
+ cat(as.character(seq))
186
+ """
187
+ return _run_r_command(r_code)
188
+
189
+ @mcp.tool()
190
+ def list_available_sequences(
191
+ data_package_name: str,
192
+ ) -> Dict[str, Any]:
193
+ """
194
+ Lists the available sequence names (e.g., chromosomes) within an installed BSgenome data package.
195
+
196
+ The specified BSgenome data package must be installed prior to calling this function
197
+ using `install_bsgenome_data_package`.
198
+
199
+ Args:
200
+ data_package_name: The name of the installed BSgenome data package
201
+ (e.g., "BSgenome.Hsapiens.UCSC.hg38").
202
+
203
+ Returns:
204
+ A dictionary containing command execution details, stdout, stderr, and any output files.
205
+ The stdout will contain a newline-separated list of sequence names.
206
+ """
207
+ # Input validation
208
+ if not isinstance(data_package_name, str) or not data_package_name:
209
+ raise ValueError("Data package name must be a non-empty string.")
210
+ if not data_package_name.startswith("BSgenome."):
211
+ raise ValueError(f"Invalid BSgenome data package name: '{data_package_name}'. "
212
+ "It should start with 'BSgenome.'.")
213
+
214
+ r_code = f"""
215
+ library({data_package_name})
216
+ genome_obj <- get(data_package_name)
217
+ cat(seqnames(genome_obj), sep="\\n")
218
+ """
219
+ return _run_r_command(r_code)
220
+
221
+ @mcp.tool()
222
+ def get_sequence_lengths(
223
+ data_package_name: str,
224
+ seqname: Optional[str] = None,
225
+ ) -> Dict[str, Any]:
226
+ """
227
+ Retrieves the lengths of sequences (e.g., chromosomes) within an installed BSgenome data package.
228
+
229
+ The specified BSgenome data package must be installed prior to calling this function
230
+ using `install_bsgenome_data_package`.
231
+
232
+ Args:
233
+ data_package_name: The name of the installed BSgenome data package
234
+ (e.g., "BSgenome.Hsapiens.UCSC.hg38").
235
+ seqname: Optional. If provided, returns the length of only this specific sequence.
236
+ If None, returns lengths for all sequences.
237
+
238
+ Returns:
239
+ A dictionary containing command execution details, stdout, stderr, and any output files.
240
+ The stdout will contain sequence names and their lengths, typically one per line.
241
+ """
242
+ # Input validation
243
+ if not isinstance(data_package_name, str) or not data_package_name:
244
+ raise ValueError("Data package name must be a non-empty string.")
245
+ if not data_package_name.startswith("BSgenome."):
246
+ raise ValueError(f"Invalid BSgenome data package name: '{data_package_name}'. "
247
+ "It should start with 'BSgenome.'.")
248
+ if seqname is not None and (not isinstance(seqname, str) or not seqname):
249
+ raise ValueError("Sequence name (seqname) must be a non-empty string if provided.")
250
+
251
+ if seqname:
252
+ r_code = f"""
253
+ library({data_package_name})
254
+ genome_obj <- get(data_package_name)
255
+ len <- seqlengths(genome_obj)["{seqname}"]
256
+ if (is.na(len)) {{
257
+ stop("Sequence '{seqname}' not found in package '{data_package_name}'.")
258
+ }}
259
+ cat("{seqname}:", len, "\\n")
260
+ """
261
+ else:
262
+ r_code = f"""
263
+ library({data_package_name})
264
+ genome_obj <- get(data_package_name)
265
+ lengths <- seqlengths(genome_obj)
266
+ for (i in seq_along(lengths)) {{
267
+ cat(names(lengths)[i], ": ", lengths[i], "\\n", sep="")
268
+ }}
269
+ """
270
+ return _run_r_command(r_code)
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-bsgenome/app/bioconductor-bsgenome_shim_server.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-bsgenome/app/bioconductor-bsgenome_server.py')
11
+ SERVER_NAME = 'biosci_bioconductor_bsgenome'
12
+
13
+
14
+ class _ShimMCP:
15
+ @staticmethod
16
+ def tool():
17
+ def _decorator(fn):
18
+ return fn
19
+ return _decorator
20
+
21
+
22
+ def _load_functions():
23
+ code = SOURCE_SERVER.read_text(encoding="utf-8")
24
+ tree = ast.parse(code, filename=str(SOURCE_SERVER))
25
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
26
+ namespace = {
27
+ "__name__": "__mcp_source__",
28
+ "mcp": _ShimMCP(),
29
+ }
30
+ exec(compile(code, str(SOURCE_SERVER), "exec"), namespace, namespace)
31
+ loaded = []
32
+ for name in function_names:
33
+ fn = namespace.get(name)
34
+ if callable(fn):
35
+ loaded.append(fn)
36
+ return loaded
37
+
38
+
39
+ mcp = FastMCP(SERVER_NAME)
40
+ for _fn in _load_functions():
41
+ mcp.tool()(_fn)
42
+
43
+
44
+ if __name__ == "__main__":
45
+ mcp.run(transport="stdio")
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.10-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y default-jre wget curl && apt-get clean && rm -rf /var/lib/apt/lists/*
6
+
7
+ # Install Miniconda
8
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && bash /tmp/miniconda.sh -b -p /opt/conda && rm /tmp/miniconda.sh
9
+
10
+ # Add conda to PATH
11
+ ENV PATH="/opt/conda/bin:$PATH"
12
+
13
+ # Install bioconductor-cardspa via conda (e.g., from bioconda)
14
+ RUN conda install -c bioconda bioconductor-cardspa -y && conda clean -a
15
+
16
+ # Install Python dependencies
17
+ RUN pip install uv
18
+ RUN uv pip install --system fastmcp
19
+
20
+ # Create app directory
21
+ WORKDIR /app
22
+
23
+ # Copy your MCP server
24
+ COPY app/bioconductor-cardspa_server.py /app/
25
+
26
+ # Create workspace and output directories
27
+ RUN mkdir -p /app/workspace /app/output
28
+
29
+ # Make sure the server script is executable
30
+ RUN chmod +x /app/bioconductor-cardspa_server.py
31
+
32
+ # Expose port for MCP over HTTP (optional)
33
+ EXPOSE 8000
34
+
35
+ # Health check
36
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD python -c "import sys; sys.exit(0)"
37
+
38
+ # Default command runs the MCP server via stdio
39
+ CMD ["python", "/app/bioconductor-cardspa_server.py"]
40
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/app/bioconductor-cardspa_server.py ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import tempfile
3
+ from pathlib import Path
4
+ from typing import Dict, List, Literal, Union
5
+
6
+ # This is a placeholder for the MCP framework's decorator.
7
+ # The user's environment will provide the actual mcp.tool implementation.
8
+ class Mcp:
9
+ def tool(self):
10
+ def decorator(f):
11
+ return f
12
+ return decorator
13
+ mcp = Mcp()
14
+
15
+
16
+ @mcp.tool()
17
+ def cardspa(
18
+ sce_object: Path,
19
+ output_path: Path,
20
+ phenotype_col: str,
21
+ location_col_1: str = "row",
22
+ location_col_2: str = "col",
23
+ method: Literal["Giotto", "SpaGCN", "BayesSpace"] = "Giotto",
24
+ num_results: int = 10,
25
+ num_core: int = 1,
26
+ min_cells: int = 10,
27
+ min_pairs: int = 10,
28
+ ) -> Dict[str, Union[str, List[str], int]]:
29
+ """
30
+ Performs spatial analysis on single-cell data using the cardspa R package.
31
+
32
+ This tool wraps the main `cardspa` function, which can utilize different
33
+ backend methods like Giotto, SpaGCN, or BayesSpace to identify significant
34
+ co-enrichment of cell types in spatial transcriptomics data.
35
+
36
+ Args:
37
+ sce_object: Path to the input SingleCellExperiment object in RDS format.
38
+ output_path: Path to save the output results object in RDS format.
39
+ phenotype_col: The column name in the SCE object's colData that contains cell type annotations.
40
+ location_col_1: The column name for the first spatial coordinate (e.g., 'row', 'x').
41
+ location_col_2: The column name for the second spatial coordinate (e.g., 'col', 'y').
42
+ method: The computational method to use for the analysis.
43
+ num_results: The number of top co-enriched cell type pairs to return.
44
+ num_core: The number of CPU cores to use for parallel processing.
45
+ min_cells: The minimum number of cells required for a cell type to be included in the analysis.
46
+ min_pairs: The minimum number of interacting pairs for a result to be considered significant.
47
+
48
+ Returns:
49
+ A dictionary containing the executed command, stdout, stderr, and a list of output files.
50
+ In case of an error, it includes an error message and return code.
51
+ """
52
+ # --- Input Validation ---
53
+ if not sce_object.is_file():
54
+ raise FileNotFoundError(f"Input file not found: {sce_object}")
55
+
56
+ if not output_path.parent.is_dir():
57
+ try:
58
+ output_path.parent.mkdir(parents=True, exist_ok=True)
59
+ except OSError as e:
60
+ raise NotADirectoryError(
61
+ f"Output directory does not exist and could not be created: {output_path.parent}"
62
+ ) from e
63
+
64
+ if num_results <= 0:
65
+ raise ValueError("num_results must be a positive integer.")
66
+ if num_core <= 0:
67
+ raise ValueError("num_core must be a positive integer.")
68
+ if min_cells <= 0:
69
+ raise ValueError("min_cells must be a positive integer.")
70
+ if min_pairs <= 0:
71
+ raise ValueError("min_pairs must be a positive integer.")
72
+
73
+ # R script to be executed. It includes package installation for portability.
74
+ r_script_content = """
75
+ # run_cardspa.R
76
+ options(warn=-1)
77
+ suppressPackageStartupMessages({
78
+ if (!requireNamespace("argparser", quietly = TRUE)) {
79
+ install.packages("argparser", repos = "http://cran.us.r-project.org", quiet = TRUE)
80
+ }
81
+ if (!requireNamespace("BiocManager", quietly = TRUE)) {
82
+ install.packages("BiocManager", repos = "http://cran.us.r-project.org", quiet = TRUE)
83
+ }
84
+ if (!requireNamespace("cardspa", quietly = TRUE)) {
85
+ BiocManager::install("cardspa", update=FALSE, ask=FALSE, quiet = TRUE)
86
+ }
87
+ if (!requireNamespace("SingleCellExperiment", quietly = TRUE)) {
88
+ BiocManager::install("SingleCellExperiment", update=FALSE, ask=FALSE, quiet = TRUE)
89
+ }
90
+ library(argparser)
91
+ library(cardspa)
92
+ library(SingleCellExperiment)
93
+ })
94
+
95
+ p <- arg_parser("Run cardspa analysis")
96
+ p <- add_argument(p, "--sce_object", help="Path to the input SingleCellExperiment RDS file", type="character")
97
+ p <- add_argument(p, "--output_path", help="Path to save the output RDS file", type="character")
98
+ p <- add_argument(p, "--phenotype_col", help="Column name for cell types", type="character")
99
+ p <- add_argument(p, "--location_col_1", help="First column name for spatial coordinates", default="row", type="character")
100
+ p <- add_argument(p, "--location_col_2", help="Second column name for spatial coordinates", default="col", type="character")
101
+ p <- add_argument(p, "--method", help="Method for spatial analysis (Giotto, SpaGCN, BayesSpace)", default="Giotto", type="character")
102
+ p <- add_argument(p, "--num_results", help="Number of top results to return", default=10, type="integer")
103
+ p <- add_argument(p, "--num_core", help="Number of cores for parallel processing", default=1, type="integer")
104
+ p <- add_argument(p, "--min_cells", help="Minimum number of cells for a cell type", default=10, type="integer")
105
+ p <- add_argument(p, "--min_pairs", help="Minimum number of interacting pairs", default=10, type="integer")
106
+
107
+ argv <- parse_args(p)
108
+
109
+ if (is.na(argv$sce_object) || is.na(argv$output_path) || is.na(argv$phenotype_col)) {
110
+ stop("Missing required arguments: --sce_object, --output_path, or --phenotype_col", call. = FALSE)
111
+ }
112
+
113
+ cat("Reading input SCE object from:", argv$sce_object, "\\n")
114
+ sce <- readRDS(argv$sce_object)
115
+
116
+ cat("Running cardspa analysis with method:", argv$method, "\\n")
117
+ results <- cardspa(
118
+ sce_object = sce,
119
+ location_col = c(argv$location_col_1, argv$location_col_2),
120
+ phenotype_col = argv$phenotype_col,
121
+ method = argv$method,
122
+ num_results = argv$num_results,
123
+ num_core = argv$num_core,
124
+ min_cells = argv$min_cells,
125
+ min_pairs = argv$min_pairs
126
+ )
127
+
128
+ cat("Saving results to:", argv$output_path, "\\n")
129
+ saveRDS(results, file = argv$output_path)
130
+ cat("cardspa analysis complete. Results saved to:", argv$output_path, "\\n")
131
+ """
132
+
133
+ # --- Subprocess Execution ---
134
+ with tempfile.NamedTemporaryFile(mode='w', suffix=".R", delete=False) as r_script_file:
135
+ r_script_file.write(r_script_content)
136
+ r_script_path = Path(r_script_file.name)
137
+
138
+ cmd = [
139
+ "Rscript", str(r_script_path),
140
+ "--sce_object", str(sce_object.resolve()),
141
+ "--output_path", str(output_path.resolve()),
142
+ "--phenotype_col", phenotype_col,
143
+ "--location_col_1", location_col_1,
144
+ "--location_col_2", location_col_2,
145
+ "--method", method,
146
+ "--num_results", str(num_results),
147
+ "--num_core", str(num_core),
148
+ "--min_cells", str(min_cells),
149
+ "--min_pairs", str(min_pairs),
150
+ ]
151
+ command_executed = " ".join(cmd)
152
+
153
+ try:
154
+ result = subprocess.run(
155
+ cmd,
156
+ check=True,
157
+ capture_output=True,
158
+ text=True,
159
+ encoding='utf-8'
160
+ )
161
+ return {
162
+ "command_executed": command_executed,
163
+ "stdout": result.stdout,
164
+ "stderr": result.stderr,
165
+ "output_files": [str(output_path.resolve())]
166
+ }
167
+ except FileNotFoundError:
168
+ raise RuntimeError("Rscript command not found. Please ensure R is installed and in your system's PATH.")
169
+ except subprocess.CalledProcessError as e:
170
+ return {
171
+ "command_executed": command_executed,
172
+ "stdout": e.stdout,
173
+ "stderr": e.stderr,
174
+ "error": "cardspa execution failed.",
175
+ "return_code": e.returncode,
176
+ "output_files": []
177
+ }
178
+ finally:
179
+ # Ensure temporary script is always removed
180
+ if r_script_path.exists():
181
+ r_script_path.unlink()
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/app/bioconductor-cardspa_shim_server.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/app/bioconductor-cardspa_server.py')
11
+ SERVER_NAME = 'biosci_bioconductor_cardspa'
12
+
13
+
14
+ class _ShimMCP:
15
+ @staticmethod
16
+ def tool():
17
+ def _decorator(fn):
18
+ return fn
19
+ return _decorator
20
+
21
+
22
+ def _load_functions():
23
+ code = SOURCE_SERVER.read_text(encoding="utf-8")
24
+ tree = ast.parse(code, filename=str(SOURCE_SERVER))
25
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
26
+ namespace = {
27
+ "__name__": "__mcp_source__",
28
+ "mcp": _ShimMCP(),
29
+ }
30
+ exec(compile(code, str(SOURCE_SERVER), "exec"), namespace, namespace)
31
+ loaded = []
32
+ for name in function_names:
33
+ fn = namespace.get(name)
34
+ if callable(fn):
35
+ loaded.append(fn)
36
+ return loaded
37
+
38
+
39
+ mcp = FastMCP(SERVER_NAME)
40
+ for _fn in _load_functions():
41
+ mcp.tool()(_fn)
42
+
43
+
44
+ if __name__ == "__main__":
45
+ mcp.run(transport="stdio")
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/app/requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-bioconductor-cardspa:
5
+ build: .
6
+ image: mcp-bioconductor-cardspa:latest
7
+ container_name: mcp-bioconductor-cardspa
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=bioconductor-cardspa
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/environment.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ name: mcp-tool
3
+ channels:
4
+ - bioconda
5
+ - conda-forge
6
+ - defaults
7
+ dependencies:
8
+ - bioconductor-cardspa
9
+ - python=3.10
10
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cardspa/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ fastmcp
2
+ mcp
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.10-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y default-jre wget curl && apt-get clean && rm -rf /var/lib/apt/lists/*
6
+
7
+ # Install Miniconda
8
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && bash /tmp/miniconda.sh -b -p /opt/conda && rm /tmp/miniconda.sh
9
+
10
+ # Add conda to PATH
11
+ ENV PATH="/opt/conda/bin:$PATH"
12
+
13
+ # Install bioconductor-cellid via conda (e.g., from bioconda)
14
+ RUN conda install -c bioconda bioconductor-cellid -y && conda clean -a
15
+
16
+ # Install Python dependencies
17
+ RUN pip install uv
18
+ RUN uv pip install --system fastmcp
19
+
20
+ # Create app directory
21
+ WORKDIR /app
22
+
23
+ # Copy your MCP server
24
+ COPY app/bioconductor-cellid_server.py /app/
25
+
26
+ # Create workspace and output directories
27
+ RUN mkdir -p /app/workspace /app/output
28
+
29
+ # Make sure the server script is executable
30
+ RUN chmod +x /app/bioconductor-cellid_server.py
31
+
32
+ # Expose port for MCP over HTTP (optional)
33
+ EXPOSE 8000
34
+
35
+ # Health check
36
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD python -c "import sys; sys.exit(0)"
37
+
38
+ # Default command runs the MCP server via stdio
39
+ CMD ["python", "/app/bioconductor-cellid_server.py"]
40
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/app/bioconductor-cellid_server.py ADDED
@@ -0,0 +1,280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import os
3
+ from pathlib import Path
4
+ from typing import Optional, List, Union
5
+ import tempfile
6
+
7
+ def run_r_command(script_content: str):
8
+ """Helper function to execute R code via Rscript"""
9
+ with tempfile.NamedTemporaryFile(mode='w', suffix='.R', delete=False) as tmp:
10
+ tmp.write(script_content)
11
+ tmp_path = tmp.name
12
+
13
+ try:
14
+ result = subprocess.run(
15
+ ["Rscript", tmp_path],
16
+ capture_output=True,
17
+ text=True,
18
+ check=True
19
+ )
20
+ return result.stdout, result.stderr
21
+ except subprocess.CalledProcessError as e:
22
+ raise RuntimeError(f"R execution failed: {e.stderr}\nStdout: {e.stdout}")
23
+ finally:
24
+ if os.path.exists(tmp_path):
25
+ os.remove(tmp_path)
26
+
27
+ @mcp.tool()
28
+ def cellid_run_mca(
29
+ input_rds: str,
30
+ output_rds: str,
31
+ nmcs: int = 50,
32
+ assay: str = "RNA",
33
+ slot: str = "counts",
34
+ features: Optional[List[str]] = None
35
+ ):
36
+ """
37
+ Performs Multiple Correspondence Analysis (MCA) on a SingleCellExperiment or Seurat object.
38
+ MCA allows for the simultaneous representation of cells and genes in a common low-dimensional space.
39
+ """
40
+ input_path = Path(input_rds)
41
+ output_path = Path(output_rds)
42
+
43
+ if not input_path.exists():
44
+ return {"error": f"Input file {input_rds} not found."}
45
+
46
+ if nmcs <= 0:
47
+ return {"error": "nmcs must be a positive integer."}
48
+
49
+ features_r = "NULL"
50
+ if features:
51
+ features_formatted = ", ".join([f"'{f}'" for f in features])
52
+ features_r = f"c({features_formatted})"
53
+
54
+ r_script = f"""
55
+ library(CelliD)
56
+ library(Seurat)
57
+ library(SingleCellExperiment)
58
+
59
+ obj <- readRDS("{input_path}")
60
+
61
+ # Run MCA
62
+ obj <- RunMCA(obj, nmcs = {nmcs}, assay = "{assay}", slot = "{slot}", features = {features_r})
63
+
64
+ saveRDS(obj, "{output_path}")
65
+ """
66
+
67
+ try:
68
+ stdout, stderr = run_r_command(r_script)
69
+ return {
70
+ "command_executed": "RunMCA",
71
+ "stdout": stdout,
72
+ "stderr": stderr,
73
+ "output_files": [str(output_path)]
74
+ }
75
+ except Exception as e:
76
+ return {"error": str(e)}
77
+
78
+ @mcp.tool()
79
+ def cellid_get_cell_gene_set(
80
+ input_rds: str,
81
+ output_csv: str,
82
+ dims: int = 50,
83
+ n_features: int = 200
84
+ ):
85
+ """
86
+ Extracts the top gene signatures for each individual cell based on MCA coordinates.
87
+ """
88
+ input_path = Path(input_rds)
89
+ output_path = Path(output_csv)
90
+
91
+ if not input_path.exists():
92
+ return {"error": f"Input file {input_rds} not found."}
93
+
94
+ if dims <= 0 or n_features <= 0:
95
+ return {"error": "dims and n_features must be positive integers."}
96
+
97
+ r_script = f"""
98
+ library(CelliD)
99
+ library(Seurat)
100
+ library(SingleCellExperiment)
101
+ library(data.table)
102
+
103
+ obj <- readRDS("{input_path}")
104
+
105
+ # Extract gene sets per cell
106
+ # dims is treated as 1:dims
107
+ gene_sets <- GetCellGeneSet(obj, dims = 1:{dims}, n.features = {n_features})
108
+
109
+ # Convert list to a data table for export
110
+ # Each column is a cell, rows are top genes
111
+ max_len <- max(sapply(gene_sets, length))
112
+ dt <- as.data.frame(lapply(gene_sets, function(x) c(x, rep(NA, max_len - length(x)))))
113
+
114
+ write.csv(dt, "{output_path}", row.names = FALSE)
115
+ """
116
+
117
+ try:
118
+ stdout, stderr = run_r_command(r_script)
119
+ return {
120
+ "command_executed": "GetCellGeneSet",
121
+ "stdout": stdout,
122
+ "stderr": stderr,
123
+ "output_files": [str(output_path)]
124
+ }
125
+ except Exception as e:
126
+ return {"error": str(e)}
127
+
128
+ @mcp.tool()
129
+ def cellid_run_cell_hgt(
130
+ input_rds: str,
131
+ pathways_gmt: str,
132
+ output_rds: str,
133
+ dims: int = 50,
134
+ n_features: int = 200,
135
+ min_size: int = 5
136
+ ):
137
+ """
138
+ Performs cell-type assignment or functional enrichment using a Hypergeometric Test (HGT).
139
+ Matches per-cell gene signatures against a reference database (GMT format).
140
+ """
141
+ input_path = Path(input_rds)
142
+ gmt_path = Path(pathways_gmt)
143
+ output_path = Path(output_rds)
144
+
145
+ if not input_path.exists():
146
+ return {"error": f"Input RDS {input_rds} not found."}
147
+ if not gmt_path.exists():
148
+ return {"error": f"GMT file {pathways_gmt} not found."}
149
+
150
+ r_script = f"""
151
+ library(CelliD)
152
+ library(Seurat)
153
+ library(SingleCellExperiment)
154
+ library(fgsea)
155
+
156
+ obj <- readRDS("{input_path}")
157
+ pathways <- gmtPathways("{gmt_path}")
158
+
159
+ # Run Hypergeometric Test
160
+ # Returns a matrix of -log10(p-value)
161
+ hgt_matrix <- RunCellHGT(obj, pathways = pathways, dims = 1:{dims}, n.features = {n_features}, minSize = {min_size})
162
+
163
+ # If Seurat, we can add it as an assay or metadata
164
+ if(inherits(obj, "Seurat")) {{
165
+ obj[["HGT"]] <- CreateAssayObject(counts = hgt_matrix)
166
+ }} else {{
167
+ # For SCE, add to altExp
168
+ altExp(obj, "HGT") <- SummarizedExperiment(assays = list(counts = hgt_matrix))
169
+ }}
170
+
171
+ saveRDS(obj, "{output_path}")
172
+ """
173
+
174
+ try:
175
+ stdout, stderr = run_r_command(r_script)
176
+ return {
177
+ "command_executed": "RunCellHGT",
178
+ "stdout": stdout,
179
+ "stderr": stderr,
180
+ "output_files": [str(output_path)]
181
+ }
182
+ except Exception as e:
183
+ return {"error": str(e)}
184
+
185
+ @mcp.tool()
186
+ def cellid_run_gsea(
187
+ input_rds: str,
188
+ pathways_gmt: str,
189
+ output_rds: str,
190
+ dims: int = 50
191
+ ):
192
+ """
193
+ Performs Gene Set Enrichment Analysis (GSEA) on cells using the MCA gene rankings.
194
+ """
195
+ input_path = Path(input_rds)
196
+ gmt_path = Path(pathways_gmt)
197
+ output_path = Path(output_rds)
198
+
199
+ if not input_path.exists():
200
+ return {"error": f"Input RDS {input_rds} not found."}
201
+ if not gmt_path.exists():
202
+ return {"error": f"GMT file {pathways_gmt} not found."}
203
+
204
+ r_script = f"""
205
+ library(CelliD)
206
+ library(Seurat)
207
+ library(SingleCellExperiment)
208
+ library(fgsea)
209
+
210
+ obj <- readRDS("{input_path}")
211
+ pathways <- gmtPathways("{gmt_path}")
212
+
213
+ # Run GSEA
214
+ # This calculates enrichment scores for each cell and each pathway
215
+ gsea_res <- RunGSEA(obj, pathways = pathways, dims = 1:{dims})
216
+
217
+ # Save results (usually returns a matrix of NES)
218
+ if(inherits(obj, "Seurat")) {{
219
+ obj[["GSEA"]] <- CreateAssayObject(counts = gsea_res)
220
+ }} else {{
221
+ altExp(obj, "GSEA") <- SummarizedExperiment(assays = list(counts = gsea_res))
222
+ }}
223
+
224
+ saveRDS(obj, "{output_path}")
225
+ """
226
+
227
+ try:
228
+ stdout, stderr = run_r_command(r_script)
229
+ return {
230
+ "command_executed": "RunGSEA",
231
+ "stdout": stdout,
232
+ "stderr": stderr,
233
+ "output_files": [str(output_path)]
234
+ }
235
+ except Exception as e:
236
+ return {"error": str(e)}
237
+
238
+ @mcp.tool()
239
+ def cellid_run_group_mca(
240
+ input_rds: str,
241
+ group_by: str,
242
+ output_rds: str,
243
+ nmcs: int = 50,
244
+ assay: str = "RNA",
245
+ slot: str = "counts"
246
+ ):
247
+ """
248
+ Performs MCA on grouped cells (e.g., by cluster or cell type) rather than individual cells.
249
+ Useful for extracting group-specific gene signatures.
250
+ """
251
+ input_path = Path(input_rds)
252
+ output_path = Path(output_rds)
253
+
254
+ if not input_path.exists():
255
+ return {"error": f"Input file {input_rds} not found."}
256
+
257
+ r_script = f"""
258
+ library(CelliD)
259
+ library(Seurat)
260
+ library(SingleCellExperiment)
261
+
262
+ obj <- readRDS("{input_path}")
263
+
264
+ # Run Group MCA
265
+ # This aggregates cells by the specified metadata column before MCA
266
+ group_mca <- RunGroupMCA(obj, group.by = "{group_by}", nmcs = {nmcs}, assay = "{assay}", slot = "{slot}")
267
+
268
+ saveRDS(group_mca, "{output_path}")
269
+ """
270
+
271
+ try:
272
+ stdout, stderr = run_r_command(r_script)
273
+ return {
274
+ "command_executed": "RunGroupMCA",
275
+ "stdout": stdout,
276
+ "stderr": stderr,
277
+ "output_files": [str(output_path)]
278
+ }
279
+ except Exception as e:
280
+ return {"error": str(e)}
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/app/bioconductor-cellid_shim_server.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/app/bioconductor-cellid_server.py')
11
+ SERVER_NAME = 'biosci_bioconductor_cellid'
12
+
13
+
14
+ class _ShimMCP:
15
+ @staticmethod
16
+ def tool():
17
+ def _decorator(fn):
18
+ return fn
19
+ return _decorator
20
+
21
+
22
+ def _load_functions():
23
+ code = SOURCE_SERVER.read_text(encoding="utf-8")
24
+ tree = ast.parse(code, filename=str(SOURCE_SERVER))
25
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
26
+ namespace = {
27
+ "__name__": "__mcp_source__",
28
+ "mcp": _ShimMCP(),
29
+ }
30
+ exec(compile(code, str(SOURCE_SERVER), "exec"), namespace, namespace)
31
+ loaded = []
32
+ for name in function_names:
33
+ fn = namespace.get(name)
34
+ if callable(fn):
35
+ loaded.append(fn)
36
+ return loaded
37
+
38
+
39
+ mcp = FastMCP(SERVER_NAME)
40
+ for _fn in _load_functions():
41
+ mcp.tool()(_fn)
42
+
43
+
44
+ if __name__ == "__main__":
45
+ mcp.run(transport="stdio")
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-bioconductor-cellid:
5
+ build: .
6
+ image: mcp-bioconductor-cellid:latest
7
+ container_name: mcp-bioconductor-cellid
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=bioconductor-cellid
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/environment.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ name: mcp-tool
3
+ channels:
4
+ - bioconda
5
+ - conda-forge
6
+ - defaults
7
+ dependencies:
8
+ - bioconductor-cellid
9
+ - python=3.10
10
+
BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-cellid/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ fastmcp
2
+ mcp