rowan-mcp 1.0.2__py3-none-any.whl → 2.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rowan-mcp might be problematic. Click here for more details.
- rowan_mcp/__init__.py +1 -1
- rowan_mcp/__main__.py +3 -5
- rowan_mcp/functions/admet.py +0 -5
- rowan_mcp/functions/bde.py +1 -8
- rowan_mcp/functions/conformers.py +1 -4
- rowan_mcp/functions/descriptors.py +1 -4
- rowan_mcp/functions/docking.py +6 -56
- rowan_mcp/functions/electronic_properties.py +1 -4
- rowan_mcp/functions/folder_management.py +1 -8
- rowan_mcp/functions/fukui.py +1 -4
- rowan_mcp/functions/hydrogen_bond_basicity.py +1 -8
- rowan_mcp/functions/multistage_opt.py +1 -4
- rowan_mcp/functions/pka.py +1 -8
- rowan_mcp/functions/redox_potential.py +2 -5
- rowan_mcp/functions/system_management.py +1 -8
- rowan_mcp/functions/tautomers.py +1 -4
- rowan_mcp/functions_v2/BENCHMARK.md +86 -0
- rowan_mcp/functions_v2/molecule_lookup.py +232 -0
- rowan_mcp/functions_v2/protein_management.py +141 -0
- rowan_mcp/functions_v2/submit_basic_calculation_workflow.py +195 -0
- rowan_mcp/functions_v2/submit_conformer_search_workflow.py +158 -0
- rowan_mcp/functions_v2/submit_descriptors_workflow.py +52 -0
- rowan_mcp/functions_v2/submit_docking_workflow.py +244 -0
- rowan_mcp/functions_v2/submit_fukui_workflow.py +114 -0
- rowan_mcp/functions_v2/submit_irc_workflow.py +58 -0
- rowan_mcp/functions_v2/submit_macropka_workflow.py +99 -0
- rowan_mcp/functions_v2/submit_pka_workflow.py +72 -0
- rowan_mcp/functions_v2/submit_protein_cofolding_workflow.py +88 -0
- rowan_mcp/functions_v2/submit_redox_potential_workflow.py +55 -0
- rowan_mcp/functions_v2/submit_scan_workflow.py +82 -0
- rowan_mcp/functions_v2/submit_solubility_workflow.py +157 -0
- rowan_mcp/functions_v2/submit_tautomer_search_workflow.py +51 -0
- rowan_mcp/functions_v2/workflow_management_v2.py +382 -0
- rowan_mcp/server.py +109 -144
- rowan_mcp/tests/basic_calculation_from_json.py +0 -0
- rowan_mcp/tests/basic_calculation_with_constraint.py +33 -0
- rowan_mcp/tests/basic_calculation_with_solvent.py +0 -0
- rowan_mcp/tests/bde.py +37 -0
- rowan_mcp/tests/benchmark_queries.md +120 -0
- rowan_mcp/tests/cofolding_screen.py +131 -0
- rowan_mcp/tests/conformer_dependent_redox.py +37 -0
- rowan_mcp/tests/conformers.py +31 -0
- rowan_mcp/tests/data.json +189 -0
- rowan_mcp/tests/docking_screen.py +157 -0
- rowan_mcp/tests/irc.py +24 -0
- rowan_mcp/tests/macropka.py +13 -0
- rowan_mcp/tests/multistage_opt.py +13 -0
- rowan_mcp/tests/optimization.py +21 -0
- rowan_mcp/tests/phenol_pka.py +36 -0
- rowan_mcp/tests/pka.py +36 -0
- rowan_mcp/tests/protein_cofolding.py +17 -0
- rowan_mcp/tests/scan.py +28 -0
- {rowan_mcp-1.0.2.dist-info → rowan_mcp-2.0.1.dist-info}/METADATA +38 -45
- rowan_mcp-2.0.1.dist-info/RECORD +69 -0
- rowan_mcp-1.0.2.dist-info/RECORD +0 -34
- {rowan_mcp-1.0.2.dist-info → rowan_mcp-2.0.1.dist-info}/WHEEL +0 -0
- {rowan_mcp-1.0.2.dist-info → rowan_mcp-2.0.1.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import time
|
|
2
|
+
|
|
3
|
+
import stjames
|
|
4
|
+
|
|
5
|
+
import rowan
|
|
6
|
+
|
|
7
|
+
HARTREE_TO_KCALMOL = 627.5096
|
|
8
|
+
|
|
9
|
+
ligands = [
|
|
10
|
+
"CCC(C)(C)NC1=NCC2(CCC(=O)C2C)N1",
|
|
11
|
+
"CCC(C)CN=C1NCC2(CCCOC2)CN1",
|
|
12
|
+
"CC(C)CCNC1=NCC2CC(COC2=N)O1",
|
|
13
|
+
"CCC(CC)NC1=NCC2CC(CO)CC12",
|
|
14
|
+
"CCC(C)CN=C1NC=C2CCC(O)CC2=N1",
|
|
15
|
+
"CC(C#CC#N)C1=NC=C2C=CC(=O)CN12",
|
|
16
|
+
"CCC(CCN)C1NCC2=C(CC)SC(O)=C12",
|
|
17
|
+
"CCC(CC)N=C1NC=C2C=C(F)C=C(N)N12",
|
|
18
|
+
"CC(C)(C)C(N)C1=NCC2=CC(I)=NC=C2O1",
|
|
19
|
+
"CCC(CC)NC1=NCC2CC(N1)C(C)CN2",
|
|
20
|
+
"CCCC(C)N=C1NCC2CCNC2(C)CO1",
|
|
21
|
+
"CC(C)CC(N)C1NCC2=CC(N)=C(Br)N=C12",
|
|
22
|
+
"CC(C)C(CN)C1=NC=C2C=CN(C)C2=C1Br",
|
|
23
|
+
"CC(CC#C)NC1=NCC2=C(C)N(C)C=C2O1",
|
|
24
|
+
"CCCC(C)(N)C1=NCC2=CC(N)=CC=C2O1",
|
|
25
|
+
"CCCCC(N)C1=NC=C2C=CN(C)C(C)=C12",
|
|
26
|
+
"CCC(CC)N=C1NCC2CC(N)CCCN12",
|
|
27
|
+
"CC(C)C(C)(N)C1=NC=C2C=CNC(=N)C2=N1",
|
|
28
|
+
"CC(C)(CC#N)C1=NCC2CCN=COC2O1",
|
|
29
|
+
"C#CCC(C#N)C1=NC=C2C=CNN=C12",
|
|
30
|
+
"CCCCCNC1=NCC2=C(C)NN=C2N1",
|
|
31
|
+
"CCCCC(N)C1=NC=C2C(C)=NOC2=C1Br",
|
|
32
|
+
"CCCCCNC1=NCC2(CC#N)OCC1O2",
|
|
33
|
+
"CC(C)CCNC1=NC=C2CC(=N)OCCN12",
|
|
34
|
+
"CCCC(C#N)C1N(C)C2=C(C=NS2)C1=O",
|
|
35
|
+
"CCC(CC#N)C1=NCC2=C(CO1)OC(=N)S2",
|
|
36
|
+
"CCC(CCN)C1=NCC2=C(CO1)SC=N2",
|
|
37
|
+
"CCC(C(C)N)C1NCC2CCOC1C2(C)C",
|
|
38
|
+
"CC(C)(C)CNC1=NCC2CCOC1(O2)C#C",
|
|
39
|
+
"CCCCCN=C1N(C)C2CCOC2C1(C)C",
|
|
40
|
+
"CC(C)CCN=C1NCC2(CCOC2O1)C#C",
|
|
41
|
+
"CC(C)C(C#N)C1NCC2=CC(O)=C(Br)N=C12",
|
|
42
|
+
"CCC(C(C)N)C1(N)CC2CC(OC)C1C2C",
|
|
43
|
+
"CC(C)(C)CN=C1NC=C2CC(O)CC2O1",
|
|
44
|
+
"CCC(C)(C#N)C1=NC=C2CC(=O)C(C=O)N12",
|
|
45
|
+
"CCCC(C)NC1=NCC2(CCOC=N2)CC1",
|
|
46
|
+
"CCCC(C)N=C1N=CC2=CC(=O)N=C2C1=N",
|
|
47
|
+
"CC(C)C(C#N)C1=NC=C2C=C(O)OC2=C1N",
|
|
48
|
+
"CCCC(CN=C1NCC2=C(C)SC=C12)C=O",
|
|
49
|
+
"CC(C)(C)CN=C1NCC2=CNC3=C2C1=CN3",
|
|
50
|
+
"CCCCC(N)C1=NC=C2CNCC2=C1I",
|
|
51
|
+
"CC(CC#C)NC1=NCC2=C(NC(=C2)C#C)N1",
|
|
52
|
+
"CCC#CCN=C1NCC2=CNC=C2N1",
|
|
53
|
+
"CCCC(C#N)C1N(C)C2=C(NC=C2)OC1=O",
|
|
54
|
+
"CC(C)(C)CN=C1NC=C2C=NC=C2SC1=N",
|
|
55
|
+
"CC(C)C(C#N)C1NCC2=CN=C(C=C12)C#N",
|
|
56
|
+
"CC(C)C(C#N)C1(N)CC2CN(C)CC2C1C",
|
|
57
|
+
"CCC(C)(C)N=C1NCC2=C(NC(C)=C2)C1O",
|
|
58
|
+
"CC(C)C(C)NC1=NCC2CNC(C)C(C2)C1",
|
|
59
|
+
"CCC(C)CN=C1NCC2C(N)C(C)C(C)C12",
|
|
60
|
+
"CCC(C)(C#N)C1=NC=C2CNC(C)C(C)N12",
|
|
61
|
+
"CC(C)C(C#N)C1NCC2=C(N=C(C)N2)C1C",
|
|
62
|
+
"CCC(C)(C)NC1=NCC2=C(N=C(C)N2)C1C",
|
|
63
|
+
"CCC(C)(C)N=C1N=CC2=CN(C)N=C2N1C",
|
|
64
|
+
"CC(C)CCN=C1NC=C2C=NC(=NN12)C#C",
|
|
65
|
+
"CC(C)C(CN=C1NCC2(CN=CO2)O1)C#N",
|
|
66
|
+
"CCC(CC)N=C1N(C)C2=C(NC(=O)S2)C1=O",
|
|
67
|
+
"CCCC(C#N)C1NCC2=C(N=CS2)S1(=O)=O",
|
|
68
|
+
"CCC(C)(C)NC1=NCC2=CNN=C2C(=N)N1",
|
|
69
|
+
"CC(C)CCN=C1NC=C2C(N)=NC(C)=C2S1",
|
|
70
|
+
"CCC(C)(C)NC1=NC=C2C(=N)N=CNC2=N1",
|
|
71
|
+
"CCC(CC)N=C1N(C)C2=C(NN=N2)C1=NO",
|
|
72
|
+
"CCC(C)(C)NC1=NCC2=CN=NN2CCC1",
|
|
73
|
+
"CCC(C)CN=C1N=CC2=CNN=NC2=N1",
|
|
74
|
+
"CCC(CCN)C1=NC=C2C(N)=NSC2=N1",
|
|
75
|
+
"CCC(C)(CN)C1NCC2=C(N)OC=C2C1C",
|
|
76
|
+
"CC(C)(CCN)C1=NC=C2C(=N)SN=C2C=N1",
|
|
77
|
+
"CC(C)(C)CNC1=NC=C2C(=N)SN=C2O1",
|
|
78
|
+
"CCC(C)C(N)C1=NCC2=C(O1)C=CC(=N)S2",
|
|
79
|
+
"CCCCCN=C1NCC2=C(O1)N=C(S2)C#N",
|
|
80
|
+
"CCC(C)(CNC1=NCC2=C(O1)SC=N2)C=O",
|
|
81
|
+
"CC#CC(CN)C1=NCC2=C(O1)SN=C2C",
|
|
82
|
+
"CCCC(C#N)C1NCC2COC1(C2)C(C)=O",
|
|
83
|
+
"CC(C)(C)C(N)C1(N)CC2COC1C(C)(C)C2",
|
|
84
|
+
"CCCC(C#N)C1NCC2COC1(C)CN2C",
|
|
85
|
+
"CCC(C)(C)N=C1N(C)C2COC1(C)OC2C",
|
|
86
|
+
"CC(C)CCN=C1NCC2=C(OC1=N)N=NN2",
|
|
87
|
+
"CCC(CC#N)(C1NCC2=COC=C12)N(C)C",
|
|
88
|
+
"CCCC(C)(N)C1NCC2=C(OC=C12)N(C)C",
|
|
89
|
+
"CC(C)(C)CNC1=NCC2=C(OCC1)N=CS2",
|
|
90
|
+
"CC#CCCN=C1NCC2=COC=C2C=C1",
|
|
91
|
+
"CCCCCNC1=NC=C2C(OCC2(C)O)=C1",
|
|
92
|
+
"CCC(C)(C#N)C1N(C)C2=COC=C2N=C1N",
|
|
93
|
+
"CCC(C)(C)N=C1NCC2(C)OC(CC12)=NC",
|
|
94
|
+
"CCC(C)(CN)C1NCC2C(O)CCC1C2C",
|
|
95
|
+
"CCCC(C)NC1=NCC2COCC(C1)C2C",
|
|
96
|
+
"CC(C)C(C)NC1=NCC2COCCC2(C)O1",
|
|
97
|
+
"CC(C)CC(N)C1=NC=C2COC(C)C(C)N12",
|
|
98
|
+
"CCC(C)(C)NC1=NCC2COC(C)(O1)C2N",
|
|
99
|
+
"CCCC(C)(N)C1=NC=C2COCCOC2=N1",
|
|
100
|
+
"CCCC(C)N=C1N(C)C2=COC(N)=C2C1=O",
|
|
101
|
+
"CCCCCNC1=NCC2(C)OC=NCCC12",
|
|
102
|
+
"CCC(C(C)N)C1=NC=C2COC(N)=NC2=C1",
|
|
103
|
+
"CCCC(C)NC1=NCC2(C)OC(=O)OC2O1",
|
|
104
|
+
"CCCCC(N)C1NCC2=CON=C2C1C#C",
|
|
105
|
+
"CC(C)C(C)N=C1NCC2=C(O)N(C)C=C2O1",
|
|
106
|
+
"CCCC(C)N=C1N=CC2=C(O)N(C)C=CN12",
|
|
107
|
+
"CC(C)C(C#N)C1=NC=C2C(O)=NSC2=C1O",
|
|
108
|
+
"CCC(CC)N=C1NCC2=C(O)SC(=N)N=C12",
|
|
109
|
+
"CC(C)C(CN)C1NCC2=C(SC=C2C)C1C",
|
|
110
|
+
]
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
workflows = []
|
|
114
|
+
results = {}
|
|
115
|
+
|
|
116
|
+
docking_result_folder = rowan.create_folder(name="Docking results")
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
protein = rowan.create_protein_from_pdb_id("CDK2", "1HCK")
|
|
120
|
+
|
|
121
|
+
protein.sanitize()
|
|
122
|
+
time.sleep(60)
|
|
123
|
+
protein.refresh()
|
|
124
|
+
|
|
125
|
+
for ligand in ligands:
|
|
126
|
+
workflow = rowan.submit_docking_workflow(
|
|
127
|
+
protein.uuid,
|
|
128
|
+
pocket=[[103.55, 100.59, 82.99], [27.76, 32.67, 48.79]],
|
|
129
|
+
initial_molecule=stjames.Molecule.from_smiles(ligand),
|
|
130
|
+
folder_uuid=docking_result_folder.uuid,
|
|
131
|
+
name=f"Docking {ligand}",
|
|
132
|
+
)
|
|
133
|
+
workflows.append(workflow)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
for workflow in workflows:
|
|
137
|
+
workflow.wait_for_result()
|
|
138
|
+
workflow.fetch_latest(in_place=True)
|
|
139
|
+
|
|
140
|
+
lowest_conformer_energy = 0
|
|
141
|
+
for workflow in workflows:
|
|
142
|
+
conformers = workflow.data["conformers"]
|
|
143
|
+
for conformer in conformers:
|
|
144
|
+
energy = rowan.retrieve_calculation_molecules(
|
|
145
|
+
conformer[0] if isinstance(conformer, list) else conformer
|
|
146
|
+
)[0]["energy"]
|
|
147
|
+
lowest_conformer_energy = min(lowest_conformer_energy, energy)
|
|
148
|
+
|
|
149
|
+
sorted_scores = sorted(workflow.data["scores"], key=lambda x: float(x["score"]))
|
|
150
|
+
for score in sorted_scores:
|
|
151
|
+
pose_energy = rowan.retrieve_calculation_molecules(score["pose"])[0]["energy"]
|
|
152
|
+
strain = (pose_energy - lowest_conformer_energy) * HARTREE_TO_KCALMOL
|
|
153
|
+
if score["posebusters_valid"] and strain < 4:
|
|
154
|
+
results[workflow.name] = score
|
|
155
|
+
break
|
|
156
|
+
|
|
157
|
+
print(results)
|
rowan_mcp/tests/irc.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from stjames import Molecule
|
|
2
|
+
|
|
3
|
+
import rowan
|
|
4
|
+
|
|
5
|
+
# rowan.api_key = ""
|
|
6
|
+
|
|
7
|
+
result = rowan.submit_irc_workflow(
|
|
8
|
+
initial_molecule=Molecule.from_xyz_lines(
|
|
9
|
+
"""7
|
|
10
|
+
SMILES `N=C([O-])[OH2+]`
|
|
11
|
+
N -0.15519741 -1.36979175 -0.20679433
|
|
12
|
+
C 1.11565384 -1.23943631 -0.14797646
|
|
13
|
+
O 2.17614993 -1.72950370 -0.04017850
|
|
14
|
+
H -0.55869366 -2.29559315 -0.23834737
|
|
15
|
+
O 1.02571386 0.42871733 -0.27925360
|
|
16
|
+
H -0.09029954 -0.04166676 -0.31495768
|
|
17
|
+
H 1.26740151 0.88347299 0.53620841
|
|
18
|
+
""".splitlines()
|
|
19
|
+
),
|
|
20
|
+
name="HNCO + H₂O - IRC",
|
|
21
|
+
preopt=False,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
print(result)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import rowan
|
|
2
|
+
|
|
3
|
+
# Set ROWAN_API_KEY environment variable to your API key or set rowan.api_key directly
|
|
4
|
+
# rowan.api_key = "rowan-sk..."
|
|
5
|
+
|
|
6
|
+
result = rowan.submit_macropka_workflow(
|
|
7
|
+
# oseltamivir
|
|
8
|
+
initial_smiles="C1CCOC(=O)C1=C[C@@H](OC(CC)CC)[C@H](NC(C)=O)[C@@H]([NH3+])C1CCC1",
|
|
9
|
+
name="Oseltamivir macropka",
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
print(result)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import rowan
|
|
2
|
+
|
|
3
|
+
# Set ROWAN_API_KEY environment variable to your API key or set rowan.api_key directly
|
|
4
|
+
# rowan.api_key = "rowan-sk..."
|
|
5
|
+
|
|
6
|
+
result = rowan.submit_macropka_workflow(
|
|
7
|
+
# oseltamivir
|
|
8
|
+
initial_smiles="C1CCOC(=O)C1=C[C@@H](OC(CC)CC)[C@H](NC(C)=O)[C@@H]([NH3+])C1CCC1",
|
|
9
|
+
name="Oseltamivir macropka",
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
print(result)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Run an optimization calculation on a molecule using Rowan.
|
|
3
|
+
|
|
4
|
+
See documentation at: https://docs.rowansci.com/science/quantum-chemistry/geometry-optimization
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from stjames import Molecule
|
|
8
|
+
|
|
9
|
+
import rowan
|
|
10
|
+
|
|
11
|
+
# rowan.api_key = ""
|
|
12
|
+
|
|
13
|
+
result = rowan.submit_basic_calculation_workflow(
|
|
14
|
+
initial_molecule=Molecule.from_smiles("O"),
|
|
15
|
+
method="GFN2-xTB",
|
|
16
|
+
tasks=["optimize"],
|
|
17
|
+
engine="xtb",
|
|
18
|
+
name="Water Optimization",
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
print(result)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import stjames
|
|
2
|
+
|
|
3
|
+
import rowan
|
|
4
|
+
|
|
5
|
+
phenols_to_compute = {
|
|
6
|
+
"p-nitrophenol": "Oc1ccc(N(=O)=O)cc1",
|
|
7
|
+
"p-(trifluoromethyl)phenol": "Oc1ccc(C(F)(F)F)cc1",
|
|
8
|
+
"methyl p-hydroxybenzoate": "COC(=O)c1ccc(O)cc1",
|
|
9
|
+
"p-fluorophenol": "Oc1ccc(F)cc1",
|
|
10
|
+
"p-chlorophenol": "Oc1ccc(Cl)cc1",
|
|
11
|
+
"phenol": "Oc1ccccc1",
|
|
12
|
+
"p-cresol": "Oc1ccc(C)cc1",
|
|
13
|
+
"p-methoxyphenol": "COc1ccc(O)cc1",
|
|
14
|
+
"p-(dimethylamino)phenol": "CN(C)c1ccc(O)cc1",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
pka_folder = rowan.create_folder(name="phenol pKa results")
|
|
18
|
+
|
|
19
|
+
workflows = []
|
|
20
|
+
for name, smiles in phenols_to_compute.items():
|
|
21
|
+
stjames_molecule = stjames.Molecule.from_smiles(smiles)
|
|
22
|
+
workflows.append(
|
|
23
|
+
rowan.submit_pka_workflow(
|
|
24
|
+
stjames_molecule,
|
|
25
|
+
name=f"pKa {name}",
|
|
26
|
+
folder_uuid=pka_folder.uuid,
|
|
27
|
+
deprotonate_elements=[8],
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
for workflow in workflows:
|
|
33
|
+
workflow.wait_for_result()
|
|
34
|
+
workflow.fetch_latest(in_place=True)
|
|
35
|
+
|
|
36
|
+
print([(workflow.name, workflow.data["conjugate_bases"][0]["pka"]) for workflow in workflows])
|
rowan_mcp/tests/pka.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import stjames
|
|
2
|
+
|
|
3
|
+
import rowan
|
|
4
|
+
|
|
5
|
+
phenols_to_compute = {
|
|
6
|
+
"p-nitrophenol": "Oc1ccc(N(=O)=O)cc1",
|
|
7
|
+
"p-(trifluoromethyl)phenol": "Oc1ccc(C(F)(F)F)cc1",
|
|
8
|
+
"methyl p-hydroxybenzoate": "COC(=O)c1ccc(O)cc1",
|
|
9
|
+
"p-fluorophenol": "Oc1ccc(F)cc1",
|
|
10
|
+
"p-chlorophenol": "Oc1ccc(Cl)cc1",
|
|
11
|
+
"phenol": "Oc1ccccc1",
|
|
12
|
+
"p-cresol": "Oc1ccc(C)cc1",
|
|
13
|
+
"p-methoxyphenol": "COc1ccc(O)cc1",
|
|
14
|
+
"p-(dimethylamino)phenol": "CN(C)c1ccc(O)cc1",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
pka_folder = rowan.create_folder(name="phenol pKa results")
|
|
18
|
+
|
|
19
|
+
workflows = []
|
|
20
|
+
for name, smiles in phenols_to_compute.items():
|
|
21
|
+
stjames_molecule = stjames.Molecule.from_smiles(smiles)
|
|
22
|
+
workflows.append(
|
|
23
|
+
rowan.submit_pka_workflow(
|
|
24
|
+
stjames_molecule,
|
|
25
|
+
name=f"pKa {name}",
|
|
26
|
+
folder_uuid=pka_folder.uuid,
|
|
27
|
+
deprotonate_elements=[8],
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
for workflow in workflows:
|
|
33
|
+
workflow.wait_for_result()
|
|
34
|
+
workflow.fetch_latest(in_place=True)
|
|
35
|
+
|
|
36
|
+
print([(workflow.name, workflow.data["conjugate_bases"][0]["pka"]) for workflow in workflows])
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import rowan
|
|
2
|
+
|
|
3
|
+
# rowan.api_key = ""
|
|
4
|
+
|
|
5
|
+
# Run calculation remotely
|
|
6
|
+
result = rowan.submit_protein_cofolding_workflow(
|
|
7
|
+
initial_protein_sequences=[
|
|
8
|
+
"ASKGTSHEAGIVCRITKPALLVLNHETAKVIQTAFQRASYPDITGEKAMMLLGQVKYGLHNIQISHLSIASSQVELVEAKSIDVSIQDVSVVFKGTLKYGYTTAWWLGIDQSIDFEIDSAIDLQINTQLTADSGRVRTDAPDCYLSFHKLLLHLQGEREPGWIKQLFTNFISFTLKLVLKGQICKEINVISNIMADFVQTRAASILSDGDIGVDISLTGDPVITASYLESHHKGHFIYKDVSEDLPLPTFSPTLLGDSRMLYFWFSERVFHSLAKVAFQDGRLMLSLMGDEFKAVLETWGFNTNQEIFQEVVGGFPSQAQVTVHCLKMPKISCQNKGVVVDSSVMVKFLFPRPDQQHSVAYTFEEDIVTTVQASYSKKKLFLSLLDFQITPKTVSNLTESSSESIQSFLQSMITAVGIPEVMSRLEVVFTALMNSKGVSLFDIINPEIITRDGFLLLQMDFGFPEHLLVDFLQSLS"
|
|
9
|
+
],
|
|
10
|
+
initial_smiles_list=[
|
|
11
|
+
"CCOC(=O)N1c2ccc(C(F)(F)F)cc2[C@@H](N(Cc2cc(C(F)(F)F)cc(C(F)(F)F)c2)C(=O)OC)C[C@H]1CC"
|
|
12
|
+
],
|
|
13
|
+
ligand_binding_affinity_index=0,
|
|
14
|
+
name="Torcetrapib Cofolding",
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
print(result)
|
rowan_mcp/tests/scan.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Run an scan calculation on a molecule using Rowan.
|
|
3
|
+
|
|
4
|
+
See documentation at: https://docs.rowansci.com/science/workflows/scan
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from stjames import Molecule
|
|
8
|
+
|
|
9
|
+
import rowan
|
|
10
|
+
|
|
11
|
+
# rowan.api_key = ""
|
|
12
|
+
|
|
13
|
+
# Run calculation remotely
|
|
14
|
+
result = rowan.submit_scan_workflow(
|
|
15
|
+
initial_molecule=Molecule.from_smiles("O"),
|
|
16
|
+
name="Water Angle scan",
|
|
17
|
+
scan_settings={
|
|
18
|
+
"type": "angle",
|
|
19
|
+
"atoms": [2, 1, 3], # 1-indexed
|
|
20
|
+
"start": 100,
|
|
21
|
+
"stop": 110,
|
|
22
|
+
"num": 5,
|
|
23
|
+
},
|
|
24
|
+
calculation_method="GFN2-xTB",
|
|
25
|
+
calculation_engine="xtb",
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
print(result)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rowan-mcp
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.1
|
|
4
4
|
Summary: Model Context Protocol server for Rowan computational chemistry platform
|
|
5
5
|
Project-URL: Homepage, https://github.com/k-yenko/rowan-mcp
|
|
6
6
|
Author-email: Katherine Yenko <katherineayenko@gmail.com>
|
|
@@ -13,14 +13,15 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
16
|
-
Requires-Python: >=3.
|
|
16
|
+
Requires-Python: >=3.11
|
|
17
|
+
Requires-Dist: aiohttp>=3.12.15
|
|
17
18
|
Requires-Dist: fastapi>=0.104.0
|
|
18
|
-
Requires-Dist: fastmcp>=
|
|
19
|
+
Requires-Dist: fastmcp>=2.11.3
|
|
19
20
|
Requires-Dist: pubchempy>=1.0.4
|
|
20
21
|
Requires-Dist: pydantic>=2.0.0
|
|
21
22
|
Requires-Dist: python-dotenv>=1.0.0
|
|
22
23
|
Requires-Dist: rdkit>=2025.3.2
|
|
23
|
-
Requires-Dist: rowan-python>=
|
|
24
|
+
Requires-Dist: rowan-python>=2.1.1
|
|
24
25
|
Requires-Dist: typing-extensions>=4.0.0
|
|
25
26
|
Requires-Dist: uvicorn>=0.24.0
|
|
26
27
|
Provides-Extra: dev
|
|
@@ -32,7 +33,7 @@ Description-Content-Type: text/markdown
|
|
|
32
33
|
|
|
33
34
|
# Rowan MCP Server
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
MCP server for making it easy to run Rowan's molecular design and simulation tools.
|
|
36
37
|
|
|
37
38
|
---
|
|
38
39
|
|
|
@@ -56,34 +57,25 @@ That's it - no command line setup needed!
|
|
|
56
57
|
|
|
57
58
|
Just add this to your MCP configuration and it will automatically install and run:
|
|
58
59
|
|
|
59
|
-
**
|
|
60
|
+
**HTTP/SSE configuration:**
|
|
60
61
|
```json
|
|
61
62
|
{
|
|
62
63
|
"mcpServers": {
|
|
63
64
|
"rowan": {
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"env": {
|
|
67
|
-
"ROWAN_API_KEY": "your_api_key_here"
|
|
68
|
-
}
|
|
65
|
+
"type": "http",
|
|
66
|
+
"url": "http://127.0.0.1:6276/sse"
|
|
69
67
|
}
|
|
70
68
|
}
|
|
71
69
|
}
|
|
72
70
|
```
|
|
73
71
|
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
"env": {
|
|
82
|
-
"ROWAN_API_KEY": "your_api_key_here"
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
72
|
+
Then start the server:
|
|
73
|
+
```bash
|
|
74
|
+
# Set your API key
|
|
75
|
+
export ROWAN_API_KEY="your_api_key_here"
|
|
76
|
+
|
|
77
|
+
# Start the HTTP server
|
|
78
|
+
uvx --from rowan-mcp rowan-mcp
|
|
87
79
|
```
|
|
88
80
|
|
|
89
81
|
### **Option 2: Manual Installation**
|
|
@@ -100,20 +92,24 @@ uv add rowan-mcp
|
|
|
100
92
|
pip install rowan-mcp
|
|
101
93
|
```
|
|
102
94
|
|
|
103
|
-
Then
|
|
95
|
+
Then configure and start:
|
|
104
96
|
```json
|
|
105
97
|
{
|
|
106
98
|
"mcpServers": {
|
|
107
99
|
"rowan": {
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"ROWAN_API_KEY": "your_api_key_here"
|
|
111
|
-
}
|
|
100
|
+
"type": "http",
|
|
101
|
+
"url": "http://127.0.0.1:6276/sse"
|
|
112
102
|
}
|
|
113
103
|
}
|
|
114
104
|
}
|
|
115
105
|
```
|
|
116
106
|
|
|
107
|
+
```bash
|
|
108
|
+
# Set API key and start server
|
|
109
|
+
export ROWAN_API_KEY="your_api_key_here"
|
|
110
|
+
rowan-mcp
|
|
111
|
+
```
|
|
112
|
+
|
|
117
113
|
### **Get API Key**
|
|
118
114
|
|
|
119
115
|
Visit [labs.rowansci.com](https://labs.rowansci.com) → Create account → Generate API key
|
|
@@ -134,7 +130,7 @@ Ask the LLM to:
|
|
|
134
130
|
|
|
135
131
|
## **System Requirements**
|
|
136
132
|
|
|
137
|
-
- **Python 3.
|
|
133
|
+
- **Python 3.11+**
|
|
138
134
|
- **Package manager**: [uv](https://docs.astral.sh/uv/) (recommended) or pip
|
|
139
135
|
- **Rowan API key** (free at [labs.rowansci.com](https://labs.rowansci.com))
|
|
140
136
|
- **MCP-compatible client** (Claude Desktop, etc.)
|
|
@@ -142,7 +138,8 @@ Ask the LLM to:
|
|
|
142
138
|
**Development commands** (if you cloned the repo):
|
|
143
139
|
```bash
|
|
144
140
|
# Run from source
|
|
145
|
-
|
|
141
|
+
export ROWAN_API_KEY="your_api_key_here"
|
|
142
|
+
uv run python -m rowan_mcp
|
|
146
143
|
```
|
|
147
144
|
|
|
148
145
|
---
|
|
@@ -176,7 +173,7 @@ uv run python -m rowan_mcp --http
|
|
|
176
173
|
|
|
177
174
|
## **Requirements**
|
|
178
175
|
|
|
179
|
-
- Python 3.
|
|
176
|
+
- Python 3.11+
|
|
180
177
|
- Rowan API key
|
|
181
178
|
- MCP-compatible AI assistant (Claude Desktop, etc.)
|
|
182
179
|
|
|
@@ -187,19 +184,6 @@ uv run python -m rowan_mcp --http
|
|
|
187
184
|
|
|
188
185
|
---
|
|
189
186
|
|
|
190
|
-
## **Todo**
|
|
191
|
-
|
|
192
|
-
- [ ] Remove unnecessary AI spaghetti formatting 🙃
|
|
193
|
-
- [ ] Some complex conformer searches hang on "running"
|
|
194
|
-
- [ ] Edit MCP one-liner context
|
|
195
|
-
- [ ] Transition state finding and IRC
|
|
196
|
-
- [X] `rowan_scan` - Potential energy surfaces
|
|
197
|
-
- [ ] `rowan_docking` - Protein-ligand docking
|
|
198
|
-
- [X] add in h-bond, BDE and macroscopic pka, logD, BBB
|
|
199
|
-
- [ ] Folder listing API bug (returns 500 error) - Rowan side?
|
|
200
|
-
- [ ] Multistage optimization sometimes shows unexpected imaginary frequencies
|
|
201
|
-
- [ ] Some calculations show as finished in logs but not in Rowan UI
|
|
202
|
-
|
|
203
187
|
## **Citation**
|
|
204
188
|
|
|
205
189
|
If you use this MCP tool in your research, please cite the underlying Rowan platform:
|
|
@@ -233,3 +217,12 @@ To update the dxt file:
|
|
|
233
217
|
# Then update the desktop extension
|
|
234
218
|
dxt pack rowan-dxt
|
|
235
219
|
```
|
|
220
|
+
### MCP inspector
|
|
221
|
+
```bash
|
|
222
|
+
# Start the server first
|
|
223
|
+
export ROWAN_API_KEY="your_api_key_here"
|
|
224
|
+
uv run python -m rowan_mcp &
|
|
225
|
+
|
|
226
|
+
# Then inspect
|
|
227
|
+
npx @modelcontextprotocol/inspector http://127.0.0.1:6276/sse
|
|
228
|
+
```
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
rowan_mcp/__init__.py,sha256=1YLhdt94grBE3m3twzj4dpxSrYngceJIP_WG90ItmZo,376
|
|
2
|
+
rowan_mcp/__main__.py,sha256=a4ojXN6YhHy7tTSqwCznYP6luVP6OrbVqwnkPfPFBbU,264
|
|
3
|
+
rowan_mcp/server.py,sha256=w8194y9pSXKSxyOy4ADjuqAVrHxbMhUKloTUmWvTcJI,4286
|
|
4
|
+
rowan_mcp/functions/admet.py,sha256=d2IPIDlGpZasK0vR7cc4SiFsc1JCZjtv0oKs69u_W5M,2334
|
|
5
|
+
rowan_mcp/functions/bde.py,sha256=7BCC4XHiCRfk5BNxl9-AcLz3j8NVIlk7FQsI55RhQaA,3340
|
|
6
|
+
rowan_mcp/functions/calculation_retrieve.py,sha256=jL28RKvZX3QUeZ_qDlBfLdGG_Lsk6LyA1xjsHvPM-mg,3376
|
|
7
|
+
rowan_mcp/functions/conformers.py,sha256=DkeL3UMpKRmJY6IAqMs_Zd1LV77QbtQJARWkIlFSMRY,2450
|
|
8
|
+
rowan_mcp/functions/descriptors.py,sha256=SWvW8Zio_CAoCuYgTvEz9ZsEy7UPd9nDzOniY6vsvdA,2645
|
|
9
|
+
rowan_mcp/functions/docking.py,sha256=DLGkr3eGJBAJm4IG0cTkPyLn6nQUNEaMO7PlgV566Ko,11433
|
|
10
|
+
rowan_mcp/functions/docking_enhanced.py,sha256=lwviIWg_26VW8VlITIlHd-Lbw8E25tnvNrLfzK6fLJs,5528
|
|
11
|
+
rowan_mcp/functions/electronic_properties.py,sha256=VNeNkXfw5oH7tvin_GXzcxywitbmBtkTEQFG6aDD6bI,8052
|
|
12
|
+
rowan_mcp/functions/folder_management.py,sha256=T-uX0YEZzTOCn6l3rXBJ7lGJIqN5UEhKakTcdYkpKBs,4585
|
|
13
|
+
rowan_mcp/functions/fukui.py,sha256=Zgty-RhmEyNQ1jygTfPo59RvFO--xjRsUyRz_OvEseE,7648
|
|
14
|
+
rowan_mcp/functions/hydrogen_bond_basicity.py,sha256=I1V9okLWoF1fqoH2ZcKvviGLvs2oLV7bhCs8-gkxjSM,2787
|
|
15
|
+
rowan_mcp/functions/irc.py,sha256=ulMfkpVTXoQDwFVzAJRcEbyZpFxM2LucO7Mq-XkgNTs,4096
|
|
16
|
+
rowan_mcp/functions/macropka.py,sha256=ze0D8R5-1-FLfOLXNe06I-BUAUKF9CHeWuTYw30sT1s,3985
|
|
17
|
+
rowan_mcp/functions/molecular_converter.py,sha256=j9YeCnaHZahwkhG2EZNPu5VVmGy2sqIHPB_qf1ojoec,17349
|
|
18
|
+
rowan_mcp/functions/molecular_dynamics.py,sha256=yzA03LeFv8K59Cg1SAnavWwmodl4_KW667pRHJQTXNw,6990
|
|
19
|
+
rowan_mcp/functions/molecule_lookup.py,sha256=Ff3ARljNbLlGgSinREl6OFxoJ-HVXtbXPxy-r_6CMKs,1467
|
|
20
|
+
rowan_mcp/functions/multistage_opt.py,sha256=cey19EUiic5hs99EITYgwuYw2pS-oyqjspTw6X0OKdw,6083
|
|
21
|
+
rowan_mcp/functions/pdb_handler.py,sha256=EnhRqxStnke5kiSnDaWOzcJT8fAHW6VVIhTaH6ODkWE,6241
|
|
22
|
+
rowan_mcp/functions/pka.py,sha256=sAWBP_4x5otKMnR3LiSRx6a6SPA611LHEZuxspwBnww,2046
|
|
23
|
+
rowan_mcp/functions/redox_potential.py,sha256=YUxa-MdZ77D5blVq4VCpmWxHiaDU4kVU_Kn3caswdFA,13007
|
|
24
|
+
rowan_mcp/functions/scan.py,sha256=LWr6YKwCG3gv0ZtyCbPaJ81NlQyFTHFZ4WnXvSRxmVg,24235
|
|
25
|
+
rowan_mcp/functions/scan_analyzer.py,sha256=vnAokCFOxYbv3Px3p9dEIxQXL7ot6UMjeUfMb_ZF6Ug,13479
|
|
26
|
+
rowan_mcp/functions/solubility.py,sha256=-duTeVLEhnhNtNkA0L_cBk8Xjqw5bbAXrrEFqtElg4I,11112
|
|
27
|
+
rowan_mcp/functions/spin_states.py,sha256=NG7uJjTi_Fx-E4Qr7RzjNhfFmKlHfIGMD0Uhyo7sKT4,31895
|
|
28
|
+
rowan_mcp/functions/system_management.py,sha256=NroBqfG5KyaSEC8wCUgaBdoF8S26sxHWVqligVlZn58,19800
|
|
29
|
+
rowan_mcp/functions/tautomers.py,sha256=Jpwu3aQhGquWV4iFKlEyV790696MV8eCYOulkTcLx3M,2592
|
|
30
|
+
rowan_mcp/functions/workflow_management.py,sha256=EqXRqj0EuJz7h2igqOHBpq23Qyo-KT9geWp39URacxw,21130
|
|
31
|
+
rowan_mcp/functions_v2/BENCHMARK.md,sha256=QzSrpJyKYo3FlnuiTxxGYcalMFTobury9G0PvXgVVM0,3026
|
|
32
|
+
rowan_mcp/functions_v2/molecule_lookup.py,sha256=Ox7PKhjtQYMChaHbqo68IHhuxt5vXU_pOfytyJ3T09c,7795
|
|
33
|
+
rowan_mcp/functions_v2/protein_management.py,sha256=6f53SOiRkYGSho4rkqm8rKxTDEmyNPcXzBbULRvLb0k,3429
|
|
34
|
+
rowan_mcp/functions_v2/submit_basic_calculation_workflow.py,sha256=q3i6bx0ET_XnMHh33nCeGxyOjOeOt6CVADXhy3QUNQk,8100
|
|
35
|
+
rowan_mcp/functions_v2/submit_conformer_search_workflow.py,sha256=NWNxtTHTbHl8se9fBWOb0DKqEREDBFQlJFSr2HRYtko,6839
|
|
36
|
+
rowan_mcp/functions_v2/submit_descriptors_workflow.py,sha256=wKr1NVRCSCM4iGhBoAXcpqs9tqKu39VfYSKBgU7bn2I,2044
|
|
37
|
+
rowan_mcp/functions_v2/submit_docking_workflow.py,sha256=GlkdkqXBXTHpiF-xQkByyARSODKv8HuIyF-Sz4-59Rk,10976
|
|
38
|
+
rowan_mcp/functions_v2/submit_fukui_workflow.py,sha256=BM4yFXSJp-s0u2av2-R00o14xASQJv9a7DRWMEOMPmA,5203
|
|
39
|
+
rowan_mcp/functions_v2/submit_irc_workflow.py,sha256=uYI0JnPG6MaQH30h2tmSWDpEbrYZipPCq5KGzQ5M-vU,2666
|
|
40
|
+
rowan_mcp/functions_v2/submit_macropka_workflow.py,sha256=6UEEqvGwgYKcKTBuKnhydWSonBZuw1rPuXvryAL7CE0,3879
|
|
41
|
+
rowan_mcp/functions_v2/submit_pka_workflow.py,sha256=fZzDzcZBPBMPqe7DrM9Uamc4-EEMksu2dbiKrhegEVg,3388
|
|
42
|
+
rowan_mcp/functions_v2/submit_protein_cofolding_workflow.py,sha256=DxK3gT6LhGbnOIpPCvPRj3kvZLEFH6hdsEZQrOxDjhQ,4919
|
|
43
|
+
rowan_mcp/functions_v2/submit_redox_potential_workflow.py,sha256=v54oCmb2d6noiORMYJ_f5cEp2KaPp6kaN4TLlmIbX9U,2427
|
|
44
|
+
rowan_mcp/functions_v2/submit_scan_workflow.py,sha256=yohqRCFTLTupUxkLjd1rL-sDvwcX4qn7n44eCTJhoKo,4162
|
|
45
|
+
rowan_mcp/functions_v2/submit_solubility_workflow.py,sha256=ijtfOtQsXNkXpFLdN-HCWzltVm_MDeXWJWnn1xg4RLo,6739
|
|
46
|
+
rowan_mcp/functions_v2/submit_tautomer_search_workflow.py,sha256=uc1RDyC1cTOdBgzukUSyt5DTTsmeLUwnpyNbmLy5oJ0,2086
|
|
47
|
+
rowan_mcp/functions_v2/workflow_management_v2.py,sha256=e0r4-lfnbMj_rx2rs17AAUvbLWWZwpY3sG2cbfT5acY,13055
|
|
48
|
+
rowan_mcp/tests/basic_calculation_from_json.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
+
rowan_mcp/tests/basic_calculation_with_constraint.py,sha256=By_3zEA2pXI6NSV9KKkCcoGtj-3Sx5JOpZDXXFf_rFk,757
|
|
50
|
+
rowan_mcp/tests/basic_calculation_with_solvent.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
+
rowan_mcp/tests/bde.py,sha256=wJnNA-Vf_EQf4uEJzg72wi_7Dt2ytxzbbQtfFE5BGd8,1195
|
|
52
|
+
rowan_mcp/tests/benchmark_queries.md,sha256=xUGNkJKPqiwYd3sI0BlZE2EBxHJCtcuFdmFF3RN007w,3967
|
|
53
|
+
rowan_mcp/tests/cofolding_screen.py,sha256=OLfUz-GOTFgpS7jA94vBPlV55SguR09kDyIlAApsmaM,4782
|
|
54
|
+
rowan_mcp/tests/conformer_dependent_redox.py,sha256=fyEQ0yIQPEyuXnntkHDHo5kx6zCJGmNir2Y-RE7hJOI,1114
|
|
55
|
+
rowan_mcp/tests/conformers.py,sha256=gRUc1kWlWzxai4RnAeDweepW5fdv_JiL5F3dyJZS2KQ,1316
|
|
56
|
+
rowan_mcp/tests/data.json,sha256=deKhTb9Xb8vdqGoH8i8n5bqV_fXYqGGajJccVluHQIY,3750
|
|
57
|
+
rowan_mcp/tests/docking_screen.py,sha256=CDUVqax7Aial3-6d4tt8NSrJoPlmeoVqT9IeG0obcO0,5262
|
|
58
|
+
rowan_mcp/tests/irc.py,sha256=ZoSVw4jBpwU82hr6rAORY29MdkJPW5uakYZlyhOTwqU,576
|
|
59
|
+
rowan_mcp/tests/macropka.py,sha256=i5CUIIIJQDyeUdYgC_IPCJWZBmCHdnPGDiTS68n-c6c,330
|
|
60
|
+
rowan_mcp/tests/multistage_opt.py,sha256=i5CUIIIJQDyeUdYgC_IPCJWZBmCHdnPGDiTS68n-c6c,330
|
|
61
|
+
rowan_mcp/tests/optimization.py,sha256=x3a-n_H1cUVUAVmqd0nSSFbpoItSVr4J-DxvbKhkess,441
|
|
62
|
+
rowan_mcp/tests/phenol_pka.py,sha256=XoCl__rXAlUcbvqZAEssvFVnos74dBI2iS_znwL91_8,1030
|
|
63
|
+
rowan_mcp/tests/pka.py,sha256=XoCl__rXAlUcbvqZAEssvFVnos74dBI2iS_znwL91_8,1030
|
|
64
|
+
rowan_mcp/tests/protein_cofolding.py,sha256=5EC5P4yKb6M1NvZehydadkJbHC_w7Mo7qjIE1pmZp3c,854
|
|
65
|
+
rowan_mcp/tests/scan.py,sha256=DFAOMp4itWNFn5BGMhIUD7fyvxBVP9uMkuxMx3otOSM,574
|
|
66
|
+
rowan_mcp-2.0.1.dist-info/METADATA,sha256=PbBX6CIMK-ZZvPCm7A36gTy5xCscWHNG3C9q7-p3-Rk,5918
|
|
67
|
+
rowan_mcp-2.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
68
|
+
rowan_mcp-2.0.1.dist-info/entry_points.txt,sha256=QkmK3GHkTNA6gqyTIFrl2V2eVBm-VBdRAlDNsvi4Rl0,52
|
|
69
|
+
rowan_mcp-2.0.1.dist-info/RECORD,,
|
rowan_mcp-1.0.2.dist-info/RECORD
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
rowan_mcp/__init__.py,sha256=VDEcimR-BO3hPSxH-0R-dDQBCR2AKvWllMBaiVV2Zfc,376
|
|
2
|
-
rowan_mcp/__main__.py,sha256=I7wCpoCPLrCx_tWozFBtCtnoL65lmgDiZnEumj3vijM,388
|
|
3
|
-
rowan_mcp/server.py,sha256=47MsJchxzqRVd4mFQXR81wYXBX8B8fFUkl7wDYB5uMs,7702
|
|
4
|
-
rowan_mcp/functions/admet.py,sha256=m_RD7OJ8GDocEInHw4zOmk4tBf2mWBGTL3LVt-vo_mU,2438
|
|
5
|
-
rowan_mcp/functions/bde.py,sha256=x6Wmnqzy3zRDvSM_AlxSm_0ksg9lI2zV1PiBzXjU_sU,3634
|
|
6
|
-
rowan_mcp/functions/calculation_retrieve.py,sha256=jL28RKvZX3QUeZ_qDlBfLdGG_Lsk6LyA1xjsHvPM-mg,3376
|
|
7
|
-
rowan_mcp/functions/conformers.py,sha256=2Bjim0v5xajWykVwRU9YPwtNyqIo6n2wiLDgR2_5wE8,2552
|
|
8
|
-
rowan_mcp/functions/descriptors.py,sha256=HJXsMZmgx-PdqfSe39D0BcMxzRYmR38gt98fXIMc69w,2747
|
|
9
|
-
rowan_mcp/functions/docking.py,sha256=J-bcgig_68x07eCpVPG1ZJKdUFsPVeDuvhoeM9Y9V9I,13954
|
|
10
|
-
rowan_mcp/functions/docking_enhanced.py,sha256=lwviIWg_26VW8VlITIlHd-Lbw8E25tnvNrLfzK6fLJs,5528
|
|
11
|
-
rowan_mcp/functions/electronic_properties.py,sha256=hBpUz0lP5ImRS8U8Cqd04tl_vzyoUSl3eP1sHKvG7Yg,8154
|
|
12
|
-
rowan_mcp/functions/folder_management.py,sha256=qPZ6cjC2AFxr1BhXpRsJk2AZAF7GV5ojy6oJDQjYKbw,4874
|
|
13
|
-
rowan_mcp/functions/fukui.py,sha256=7uz0kQ-Bt9_m4YXto4BlEJFbAknusnwZlfl67tWrwmg,7750
|
|
14
|
-
rowan_mcp/functions/hydrogen_bond_basicity.py,sha256=xH7czHEF_stKnQoh-F93b8G8936DCTYjkf6nTa7kmKo,3081
|
|
15
|
-
rowan_mcp/functions/irc.py,sha256=ulMfkpVTXoQDwFVzAJRcEbyZpFxM2LucO7Mq-XkgNTs,4096
|
|
16
|
-
rowan_mcp/functions/macropka.py,sha256=ze0D8R5-1-FLfOLXNe06I-BUAUKF9CHeWuTYw30sT1s,3985
|
|
17
|
-
rowan_mcp/functions/molecular_converter.py,sha256=j9YeCnaHZahwkhG2EZNPu5VVmGy2sqIHPB_qf1ojoec,17349
|
|
18
|
-
rowan_mcp/functions/molecular_dynamics.py,sha256=yzA03LeFv8K59Cg1SAnavWwmodl4_KW667pRHJQTXNw,6990
|
|
19
|
-
rowan_mcp/functions/molecule_lookup.py,sha256=Ff3ARljNbLlGgSinREl6OFxoJ-HVXtbXPxy-r_6CMKs,1467
|
|
20
|
-
rowan_mcp/functions/multistage_opt.py,sha256=lWwgXZgpXnWsjgonkA1toks4t01Cdxo822xmT2EOssM,6185
|
|
21
|
-
rowan_mcp/functions/pdb_handler.py,sha256=EnhRqxStnke5kiSnDaWOzcJT8fAHW6VVIhTaH6ODkWE,6241
|
|
22
|
-
rowan_mcp/functions/pka.py,sha256=9Ne2mBxX1wryyVJm-T66o6_KPfARHnab6sKqLXpt3oU,2335
|
|
23
|
-
rowan_mcp/functions/redox_potential.py,sha256=NXU1sEkMqI-2-LD9qv7qaBhkmAvwU3dFGLQ988DG4cc,13114
|
|
24
|
-
rowan_mcp/functions/scan.py,sha256=LWr6YKwCG3gv0ZtyCbPaJ81NlQyFTHFZ4WnXvSRxmVg,24235
|
|
25
|
-
rowan_mcp/functions/scan_analyzer.py,sha256=vnAokCFOxYbv3Px3p9dEIxQXL7ot6UMjeUfMb_ZF6Ug,13479
|
|
26
|
-
rowan_mcp/functions/solubility.py,sha256=-duTeVLEhnhNtNkA0L_cBk8Xjqw5bbAXrrEFqtElg4I,11112
|
|
27
|
-
rowan_mcp/functions/spin_states.py,sha256=NG7uJjTi_Fx-E4Qr7RzjNhfFmKlHfIGMD0Uhyo7sKT4,31895
|
|
28
|
-
rowan_mcp/functions/system_management.py,sha256=UwdKD46FNEJh1zEPpvFW7-JBD6g8x-xSbmH7lrcubx0,20089
|
|
29
|
-
rowan_mcp/functions/tautomers.py,sha256=oXFUpMgCVtXy2JnyCb8G04vYj_anJj4WThD26ZGOsZ0,2694
|
|
30
|
-
rowan_mcp/functions/workflow_management.py,sha256=EqXRqj0EuJz7h2igqOHBpq23Qyo-KT9geWp39URacxw,21130
|
|
31
|
-
rowan_mcp-1.0.2.dist-info/METADATA,sha256=YnmsMhwW2K0VHeU30HuBNOV-vCKo1eoqGdBpw50XxtQ,6425
|
|
32
|
-
rowan_mcp-1.0.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
33
|
-
rowan_mcp-1.0.2.dist-info/entry_points.txt,sha256=QkmK3GHkTNA6gqyTIFrl2V2eVBm-VBdRAlDNsvi4Rl0,52
|
|
34
|
-
rowan_mcp-1.0.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|