scmcp-shared 0.3.6__py3-none-any.whl → 0.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scmcp_shared/__init__.py +1 -1
- scmcp_shared/agent.py +30 -0
- scmcp_shared/cli.py +10 -0
- scmcp_shared/schema/io.py +2 -2
- scmcp_shared/schema/pl.py +42 -42
- scmcp_shared/schema/pp.py +10 -10
- scmcp_shared/schema/tl.py +18 -18
- scmcp_shared/schema/tool.py +11 -0
- scmcp_shared/schema/util.py +9 -9
- scmcp_shared/server/auto.py +52 -0
- scmcp_shared/server/base.py +7 -12
- scmcp_shared/server/io.py +5 -4
- scmcp_shared/server/pl.py +33 -32
- scmcp_shared/server/pp.py +32 -24
- scmcp_shared/server/tl.py +35 -34
- scmcp_shared/server/util.py +19 -18
- {scmcp_shared-0.3.6.dist-info → scmcp_shared-0.4.0.dist-info}/METADATA +5 -2
- scmcp_shared-0.4.0.dist-info/RECORD +24 -0
- scmcp_shared-0.3.6.dist-info/RECORD +0 -21
- {scmcp_shared-0.3.6.dist-info → scmcp_shared-0.4.0.dist-info}/WHEEL +0 -0
- {scmcp_shared-0.3.6.dist-info → scmcp_shared-0.4.0.dist-info}/licenses/LICENSE +0 -0
scmcp_shared/server/tl.py
CHANGED
@@ -4,6 +4,7 @@ import inspect
|
|
4
4
|
from fastmcp import FastMCP
|
5
5
|
import scanpy as sc
|
6
6
|
from fastmcp.exceptions import ToolError
|
7
|
+
from fastmcp.tools.tool import Tool
|
7
8
|
from ..schema.tl import *
|
8
9
|
from ..schema import AdataInfo
|
9
10
|
from scmcp_shared.util import filter_args, add_op_log, forward_request, get_ads, generate_msg
|
@@ -23,7 +24,7 @@ class ScanpyToolsMCP(BaseMCP):
|
|
23
24
|
super().__init__("ScanpyMCP-TL-Server", include_tools, exclude_tools, AdataInfo)
|
24
25
|
|
25
26
|
def _tool_tsne(self):
|
26
|
-
def _tsne(request:
|
27
|
+
def _tsne(request: TSNEParams=TSNEParams(), adinfo: self.AdataInfo=self.AdataInfo()):
|
27
28
|
"""t-distributed stochastic neighborhood embedding (t-SNE) for visualization"""
|
28
29
|
try:
|
29
30
|
result = forward_request("tl_tsne", request, adinfo)
|
@@ -42,10 +43,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
42
43
|
raise ToolError(e.__context__)
|
43
44
|
else:
|
44
45
|
raise ToolError(e)
|
45
|
-
return _tsne
|
46
|
+
return Tool.from_function(_tsne, name="tsne")
|
46
47
|
|
47
48
|
def _tool_umap(self):
|
48
|
-
def _umap(request:
|
49
|
+
def _umap(request: UMAPParams=UMAPParams(), adinfo: self.AdataInfo=self.AdataInfo()):
|
49
50
|
"""Uniform Manifold Approximation and Projection (UMAP) for visualization"""
|
50
51
|
try:
|
51
52
|
result = forward_request("tl_umap", request, adinfo)
|
@@ -64,10 +65,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
64
65
|
raise ToolError(e.__context__)
|
65
66
|
else:
|
66
67
|
raise ToolError(e)
|
67
|
-
return _umap
|
68
|
+
return Tool.from_function(_umap, name="umap")
|
68
69
|
|
69
70
|
def _tool_draw_graph(self):
|
70
|
-
def _draw_graph(request:
|
71
|
+
def _draw_graph(request: DrawGraphParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
71
72
|
"""Force-directed graph drawing"""
|
72
73
|
try:
|
73
74
|
result = forward_request("tl_draw_graph", request, adinfo)
|
@@ -86,10 +87,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
86
87
|
raise ToolError(e.__context__)
|
87
88
|
else:
|
88
89
|
raise ToolError(e)
|
89
|
-
return _draw_graph
|
90
|
+
return Tool.from_function(_draw_graph, name="draw_graph")
|
90
91
|
|
91
92
|
def _tool_diffmap(self):
|
92
|
-
def _diffmap(request:
|
93
|
+
def _diffmap(request: DiffMapParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
93
94
|
"""Diffusion Maps for dimensionality reduction"""
|
94
95
|
try:
|
95
96
|
result = forward_request("tl_diffmap", request, adinfo)
|
@@ -109,10 +110,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
109
110
|
raise ToolError(e.__context__)
|
110
111
|
else:
|
111
112
|
raise ToolError(e)
|
112
|
-
return _diffmap
|
113
|
+
return Tool.from_function(_diffmap, name="diffmap")
|
113
114
|
|
114
115
|
def _tool_embedding_density(self):
|
115
|
-
def _embedding_density(request:
|
116
|
+
def _embedding_density(request: EmbeddingDensityParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
116
117
|
"""Calculate the density of cells in an embedding"""
|
117
118
|
try:
|
118
119
|
result = forward_request("tl_embedding_density", request, adinfo)
|
@@ -131,10 +132,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
131
132
|
raise ToolError(e.__context__)
|
132
133
|
else:
|
133
134
|
raise ToolError(e)
|
134
|
-
return _embedding_density
|
135
|
+
return Tool.from_function(_embedding_density, name="embedding_density")
|
135
136
|
|
136
137
|
def _tool_leiden(self):
|
137
|
-
def _leiden(request:
|
138
|
+
def _leiden(request: LeidenParams=LeidenParams(), adinfo: self.AdataInfo=self.AdataInfo()):
|
138
139
|
"""Leiden clustering algorithm for community detection"""
|
139
140
|
try:
|
140
141
|
result = forward_request("tl_leiden", request, adinfo)
|
@@ -153,10 +154,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
153
154
|
raise ToolError(e.__context__)
|
154
155
|
else:
|
155
156
|
raise ToolError(e)
|
156
|
-
return _leiden
|
157
|
+
return Tool.from_function(_leiden, name="leiden")
|
157
158
|
|
158
159
|
def _tool_louvain(self):
|
159
|
-
def _louvain(request:
|
160
|
+
def _louvain(request: LouvainParams=LouvainParams(), adinfo: self.AdataInfo=self.AdataInfo()):
|
160
161
|
"""Louvain clustering algorithm for community detection"""
|
161
162
|
try:
|
162
163
|
result = forward_request("tl_louvain", request, adinfo)
|
@@ -175,10 +176,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
175
176
|
raise ToolError(e.__context__)
|
176
177
|
else:
|
177
178
|
raise ToolError(e)
|
178
|
-
return _louvain
|
179
|
+
return Tool.from_function(_louvain, name="louvain")
|
179
180
|
|
180
181
|
def _tool_dendrogram(self):
|
181
|
-
def _dendrogram(request:
|
182
|
+
def _dendrogram(request: DendrogramParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
182
183
|
"""Hierarchical clustering dendrogram"""
|
183
184
|
try:
|
184
185
|
result = forward_request("tl_dendrogram", request, adinfo)
|
@@ -197,10 +198,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
197
198
|
raise ToolError(e.__context__)
|
198
199
|
else:
|
199
200
|
raise ToolError(e)
|
200
|
-
return _dendrogram
|
201
|
+
return Tool.from_function(_dendrogram, name="dendrogram")
|
201
202
|
|
202
203
|
def _tool_dpt(self):
|
203
|
-
def _dpt(request:
|
204
|
+
def _dpt(request: DPTParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
204
205
|
"""Diffusion Pseudotime (DPT) analysis"""
|
205
206
|
try:
|
206
207
|
result = forward_request("tl_dpt", request, adinfo)
|
@@ -219,10 +220,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
219
220
|
raise ToolError(e.__context__)
|
220
221
|
else:
|
221
222
|
raise ToolError(e)
|
222
|
-
return _dpt
|
223
|
+
return Tool.from_function(_dpt, name="dpt")
|
223
224
|
|
224
225
|
def _tool_paga(self):
|
225
|
-
def _paga(request:
|
226
|
+
def _paga(request: PAGAParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
226
227
|
"""Partition-based graph abstraction"""
|
227
228
|
try:
|
228
229
|
result = forward_request("tl_paga", request, adinfo)
|
@@ -241,10 +242,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
241
242
|
raise ToolError(e.__context__)
|
242
243
|
else:
|
243
244
|
raise ToolError(e)
|
244
|
-
return _paga
|
245
|
+
return Tool.from_function(_paga, name="paga")
|
245
246
|
|
246
247
|
def _tool_ingest(self):
|
247
|
-
def _ingest(request:
|
248
|
+
def _ingest(request: IngestParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
248
249
|
"""Map labels and embeddings from reference data to new data"""
|
249
250
|
try:
|
250
251
|
result = forward_request("tl_ingest", request, adinfo)
|
@@ -263,10 +264,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
263
264
|
raise ToolError(e.__context__)
|
264
265
|
else:
|
265
266
|
raise ToolError(e)
|
266
|
-
return _ingest
|
267
|
+
return Tool.from_function(_ingest, name="ingest")
|
267
268
|
|
268
269
|
def _tool_rank_genes_groups(self):
|
269
|
-
def _rank_genes_groups(request:
|
270
|
+
def _rank_genes_groups(request: RankGenesGroupsParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
270
271
|
"""Rank genes for characterizing groups, for differentially expressison analysis"""
|
271
272
|
try:
|
272
273
|
result = forward_request("tl_rank_genes_groups", request, adinfo)
|
@@ -285,10 +286,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
285
286
|
raise ToolError(e.__context__)
|
286
287
|
else:
|
287
288
|
raise ToolError(e)
|
288
|
-
return _rank_genes_groups
|
289
|
+
return Tool.from_function(_rank_genes_groups, name="rank_genes_groups")
|
289
290
|
|
290
291
|
def _tool_filter_rank_genes_groups(self):
|
291
|
-
def _filter_rank_genes_groups(request:
|
292
|
+
def _filter_rank_genes_groups(request: FilterRankGenesGroupsParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
292
293
|
"""Filter out genes based on fold change and fraction of genes"""
|
293
294
|
try:
|
294
295
|
result = forward_request("tl_filter_rank_genes_groups", request, adinfo)
|
@@ -307,10 +308,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
307
308
|
raise ToolError(e.__context__)
|
308
309
|
else:
|
309
310
|
raise ToolError(e)
|
310
|
-
return _filter_rank_genes_groups
|
311
|
+
return Tool.from_function(_filter_rank_genes_groups, name="filter_rank_genes_groups")
|
311
312
|
|
312
313
|
def _tool_marker_gene_overlap(self):
|
313
|
-
def _marker_gene_overlap(request:
|
314
|
+
def _marker_gene_overlap(request: MarkerGeneOverlapParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
314
315
|
"""Calculate overlap between data-derived marker genes and reference markers"""
|
315
316
|
try:
|
316
317
|
result = forward_request("tl_marker_gene_overlap", request, adinfo)
|
@@ -329,10 +330,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
329
330
|
raise ToolError(e.__context__)
|
330
331
|
else:
|
331
332
|
raise ToolError(e)
|
332
|
-
return _marker_gene_overlap
|
333
|
+
return Tool.from_function(_marker_gene_overlap, name="marker_gene_overlap")
|
333
334
|
|
334
335
|
def _tool_score_genes(self):
|
335
|
-
def _score_genes(request:
|
336
|
+
def _score_genes(request: ScoreGenesParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
336
337
|
"""Score a set of genes based on their average expression"""
|
337
338
|
try:
|
338
339
|
result = forward_request("tl_score_genes", request, adinfo)
|
@@ -351,10 +352,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
351
352
|
raise ToolError(e.__context__)
|
352
353
|
else:
|
353
354
|
raise ToolError(e)
|
354
|
-
return _score_genes
|
355
|
+
return Tool.from_function(_score_genes, name="score_genes")
|
355
356
|
|
356
357
|
def _tool_score_genes_cell_cycle(self):
|
357
|
-
def _score_genes_cell_cycle(request:
|
358
|
+
def _score_genes_cell_cycle(request: ScoreGenesCellCycleParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
358
359
|
"""Score cell cycle genes and assign cell cycle phases"""
|
359
360
|
try:
|
360
361
|
result = forward_request("tl_score_genes_cell_cycle", request, adinfo)
|
@@ -373,10 +374,10 @@ class ScanpyToolsMCP(BaseMCP):
|
|
373
374
|
raise ToolError(e.__context__)
|
374
375
|
else:
|
375
376
|
raise ToolError(e)
|
376
|
-
return _score_genes_cell_cycle
|
377
|
+
return Tool.from_function(_score_genes_cell_cycle, name="score_genes_cell_cycle")
|
377
378
|
|
378
379
|
def _tool_pca(self):
|
379
|
-
def _pca(request:
|
380
|
+
def _pca(request: PCAParams=PCAParams(), adinfo: self.AdataInfo=self.AdataInfo()):
|
380
381
|
"""Compute PCA (Principal Component Analysis)."""
|
381
382
|
try:
|
382
383
|
result = forward_request("tl_pca", request, adinfo)
|
@@ -395,4 +396,4 @@ class ScanpyToolsMCP(BaseMCP):
|
|
395
396
|
raise ToolError(e.__context__)
|
396
397
|
else:
|
397
398
|
raise ToolError(e)
|
398
|
-
return _pca
|
399
|
+
return Tool.from_function(_pca, name="pca")
|
scmcp_shared/server/util.py
CHANGED
@@ -4,8 +4,9 @@ from pathlib import Path
|
|
4
4
|
import scanpy as sc
|
5
5
|
from fastmcp import FastMCP , Context
|
6
6
|
from fastmcp.exceptions import ToolError
|
7
|
+
from fastmcp.tools.tool import Tool
|
7
8
|
from ..schema.util import *
|
8
|
-
from ..schema import
|
9
|
+
from ..schema import AdataInfo
|
9
10
|
from ..util import filter_args, forward_request, get_ads, generate_msg,add_op_log
|
10
11
|
from .base import BaseMCP
|
11
12
|
|
@@ -24,7 +25,7 @@ class ScanpyUtilMCP(BaseMCP):
|
|
24
25
|
|
25
26
|
|
26
27
|
def _tool_query_op_log(self):
|
27
|
-
def _query_op_log(request:
|
28
|
+
def _query_op_log(request: QueryOpLogParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
28
29
|
"""Query the adata operation log"""
|
29
30
|
adata = get_ads().get_adata(adinfo=adinfo)
|
30
31
|
op_dic = adata.uns["operation"]["op"]
|
@@ -33,10 +34,10 @@ class ScanpyUtilMCP(BaseMCP):
|
|
33
34
|
for opid in opids:
|
34
35
|
op_list.append(op_dic[opid])
|
35
36
|
return op_list
|
36
|
-
return _query_op_log
|
37
|
+
return Tool.from_function(_query_op_log, name="query_op_log")
|
37
38
|
|
38
39
|
def _tool_mark_var(self):
|
39
|
-
def _mark_var(request:
|
40
|
+
def _mark_var(request: MarkVarParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
40
41
|
"""
|
41
42
|
Determine if each gene meets specific conditions and store results in adata.var as boolean values.
|
42
43
|
For example: mitochondrion genes startswith MT-.
|
@@ -84,10 +85,10 @@ class ScanpyUtilMCP(BaseMCP):
|
|
84
85
|
raise ToolError(e.__context__)
|
85
86
|
else:
|
86
87
|
raise ToolError(e)
|
87
|
-
return _mark_var
|
88
|
+
return Tool.from_function(_mark_var, name="mark_var")
|
88
89
|
|
89
90
|
def _tool_list_var(self):
|
90
|
-
def _list_var(request:
|
91
|
+
def _list_var(request: ListVarParams=ListVarParams(), adinfo: self.AdataInfo=self.AdataInfo()):
|
91
92
|
"""List key columns in adata.var. It should be called for checking when other tools need var key column names as input."""
|
92
93
|
try:
|
93
94
|
result = forward_request("ul_list_var", request, adinfo)
|
@@ -104,10 +105,10 @@ class ScanpyUtilMCP(BaseMCP):
|
|
104
105
|
raise ToolError(e.__context__)
|
105
106
|
else:
|
106
107
|
raise ToolError(e)
|
107
|
-
return _list_var
|
108
|
+
return Tool.from_function(_list_var, name="list_var")
|
108
109
|
|
109
110
|
def _tool_list_obs(self):
|
110
|
-
def _list_obs(request:
|
111
|
+
def _list_obs(request: ListObsParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
111
112
|
"""List key columns in adata.obs. It should be called before other tools need obs key column names input."""
|
112
113
|
try:
|
113
114
|
result = forward_request("ul_list_obs", request, adinfo)
|
@@ -124,10 +125,10 @@ class ScanpyUtilMCP(BaseMCP):
|
|
124
125
|
raise ToolError(e.__context__)
|
125
126
|
else:
|
126
127
|
raise ToolError(e)
|
127
|
-
return _list_obs
|
128
|
+
return Tool.from_function(_list_obs, name="list_obs")
|
128
129
|
|
129
130
|
def _tool_check_var(self):
|
130
|
-
def _check_var(request:
|
131
|
+
def _check_var(request: VarNamesParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
131
132
|
"""Check if genes/variables exist in adata.var_names. This tool should be called before gene expression visualizations or color by genes."""
|
132
133
|
try:
|
133
134
|
result = forward_request("ul_check_var", request, adinfo)
|
@@ -149,10 +150,10 @@ class ScanpyUtilMCP(BaseMCP):
|
|
149
150
|
raise ToolError(e.__context__)
|
150
151
|
else:
|
151
152
|
raise ToolError(e)
|
152
|
-
return _check_var
|
153
|
+
return Tool.from_function(_check_var, name="check_var")
|
153
154
|
|
154
155
|
def _tool_merge_adata(self):
|
155
|
-
def _merge_adata(request:
|
156
|
+
def _merge_adata(request: ConcatBaseParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
156
157
|
"""Merge multiple adata objects."""
|
157
158
|
try:
|
158
159
|
result = forward_request("ul_merge_adata", request, adinfo)
|
@@ -174,10 +175,10 @@ class ScanpyUtilMCP(BaseMCP):
|
|
174
175
|
raise ToolError(e.__context__)
|
175
176
|
else:
|
176
177
|
raise ToolError(e)
|
177
|
-
return _merge_adata
|
178
|
+
return Tool.from_function(_merge_adata, name="merge_adata")
|
178
179
|
|
179
180
|
def _tool_set_dpt_iroot(self):
|
180
|
-
def _set_dpt_iroot(request:
|
181
|
+
def _set_dpt_iroot(request: DPTIROOTParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
181
182
|
"""Set the iroot cell"""
|
182
183
|
try:
|
183
184
|
result = forward_request("ul_set_dpt_iroot", request, adinfo)
|
@@ -205,10 +206,10 @@ class ScanpyUtilMCP(BaseMCP):
|
|
205
206
|
raise ToolError(e.__context__)
|
206
207
|
else:
|
207
208
|
raise ToolError(e)
|
208
|
-
return _set_dpt_iroot
|
209
|
+
return Tool.from_function(_set_dpt_iroot, name="set_dpt_iroot")
|
209
210
|
|
210
211
|
def _tool_add_layer(self):
|
211
|
-
def _add_layer(request:
|
212
|
+
def _add_layer(request: AddLayerParams, adinfo: self.AdataInfo=self.AdataInfo()):
|
212
213
|
"""Add a layer to the AnnData object."""
|
213
214
|
try:
|
214
215
|
result = forward_request("ul_add_layer", request, adinfo)
|
@@ -237,7 +238,7 @@ class ScanpyUtilMCP(BaseMCP):
|
|
237
238
|
raise ToolError(e.__context__)
|
238
239
|
else:
|
239
240
|
raise ToolError(e)
|
240
|
-
return _add_layer
|
241
|
+
return Tool.from_function(_add_layer, name="add_layer")
|
241
242
|
|
242
243
|
def _tool_check_samples(self):
|
243
244
|
def _check_samples(request: None, adinfo: self.AdataInfo=self.AdataInfo()):
|
@@ -252,4 +253,4 @@ class ScanpyUtilMCP(BaseMCP):
|
|
252
253
|
raise ToolError(e.__context__)
|
253
254
|
else:
|
254
255
|
raise ToolError(e)
|
255
|
-
return _check_samples
|
256
|
+
return Tool.from_function(_check_samples, name="check_samples")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: scmcp_shared
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.4.0
|
4
4
|
Summary: A shared function libray for scmcphub
|
5
5
|
Project-URL: Homepage, http://scmcphub.org/
|
6
6
|
Project-URL: Repository, https://github.com/scmcphub/scmcp-shared
|
@@ -37,7 +37,10 @@ License: BSD 3-Clause License
|
|
37
37
|
License-File: LICENSE
|
38
38
|
Keywords: AI,agent,bioinformatics,llm,mcp,model context protocol,scRNA-seq,single cell
|
39
39
|
Requires-Python: >=3.10
|
40
|
-
Requires-Dist: fastmcp>=2.
|
40
|
+
Requires-Dist: fastmcp>=2.7.0
|
41
|
+
Requires-Dist: igraph
|
42
|
+
Requires-Dist: instructor>=1.8.3
|
43
|
+
Requires-Dist: leidenalg
|
41
44
|
Requires-Dist: mcp>=1.8.0
|
42
45
|
Requires-Dist: nest-asyncio
|
43
46
|
Requires-Dist: scanpy
|
@@ -0,0 +1,24 @@
|
|
1
|
+
scmcp_shared/__init__.py,sha256=5DHi9fyCf-CfX64oAsNqmkR27WRUetIg-NfPin0QKBw,24
|
2
|
+
scmcp_shared/agent.py,sha256=tWGAyOwdg3oTfYFquGPompUZMHSWqW3VQvEymywaE0o,854
|
3
|
+
scmcp_shared/cli.py,sha256=8Am2zdn1z_gle6Jz-JQkvK-6_mOB6BFhfK05A0pNpkc,5032
|
4
|
+
scmcp_shared/logging_config.py,sha256=eCuLuyxMmbj8A1E0VqYWoKA5JPTSbo6cmjS4LOyd0RQ,872
|
5
|
+
scmcp_shared/util.py,sha256=8_c6WPNpYNoxKpq6tQCC4elCQkWyk3rH-hTe1sqff4A,9535
|
6
|
+
scmcp_shared/schema/__init__.py,sha256=Kwkc7kPLjExOlxt1sWEy_5qa96MvOS8sNCMlZa6yRg8,737
|
7
|
+
scmcp_shared/schema/io.py,sha256=-wgL2NQBXwAcojid8rF2Y46GsKL7H6JiheKE6frMotw,4638
|
8
|
+
scmcp_shared/schema/pl.py,sha256=7AFXgqb2GAlmeXS6m3IdJgThLz6-FTDBmrJqoAi8j98,29612
|
9
|
+
scmcp_shared/schema/pp.py,sha256=WtaugFLP9vfusBZQCXGAYPmYu-5yWHC2wJTSZutS1XM,21674
|
10
|
+
scmcp_shared/schema/tl.py,sha256=FEZpr218eaQ8rUp5EJzbjyw1ejqCX4Shsf9CumaKs8A,34425
|
11
|
+
scmcp_shared/schema/tool.py,sha256=U-VFrovAEr2FklS8cSJPimfhTSTHmskmLfCO7Ee0s2o,267
|
12
|
+
scmcp_shared/schema/util.py,sha256=fMZxTNf9Bv_xDzrW7YK08q0tCoC3L7ofqPY0K2ykG8k,4824
|
13
|
+
scmcp_shared/server/__init__.py,sha256=4KE2Y_gDenF0ZyTGicQW0fTgJfMIQYZfpRP4hQ4rFYs,416
|
14
|
+
scmcp_shared/server/auto.py,sha256=32SC5nC0N7JuPsDSMFRvojaPmUbpybwY1aCOrQMzaL4,1781
|
15
|
+
scmcp_shared/server/base.py,sha256=I90L_DNdCv--VOIHDRjdVehq-3iBm9mV0Sc9OU7GAXQ,6426
|
16
|
+
scmcp_shared/server/io.py,sha256=kGBbtd3ltj0ypd0kgMy1l2zT2AVf5yXCHAebQR-ZtUA,4033
|
17
|
+
scmcp_shared/server/pl.py,sha256=GVu7GQKW67jz3ig43HLX0d2cjGDPJDXdxMSf6b72kAA,15558
|
18
|
+
scmcp_shared/server/pp.py,sha256=UCzogVULgSs8JTR8PiybroGlrm2QvNRrbeAYj7ujr3E,16297
|
19
|
+
scmcp_shared/server/tl.py,sha256=LeKcR6F4PNRHZomlD3-igrF44YBQW6Kg7h75psGl9c0,19112
|
20
|
+
scmcp_shared/server/util.py,sha256=b6gG1dfXe5GdhM4yUtpxBqx1gMRyQVu3dytmzJeD9zs,12590
|
21
|
+
scmcp_shared-0.4.0.dist-info/METADATA,sha256=CKca84Vmtqc5h06oOH6lxqYVDCeVNJpGypX03Y-O1iI,2435
|
22
|
+
scmcp_shared-0.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
23
|
+
scmcp_shared-0.4.0.dist-info/licenses/LICENSE,sha256=YNr1hpea195yq-wGtB8j-2dGtt7A5G00WENmxa7JGco,1495
|
24
|
+
scmcp_shared-0.4.0.dist-info/RECORD,,
|
@@ -1,21 +0,0 @@
|
|
1
|
-
scmcp_shared/__init__.py,sha256=uRdcgGfRb4TRwNLKx3spJv6bL90b8RrAvcbq2RJ2TFI,24
|
2
|
-
scmcp_shared/cli.py,sha256=KYHp5_VE2JVVT4Su57ELzQa1lI2P8Gw0b4ruBP_Dtxk,4396
|
3
|
-
scmcp_shared/logging_config.py,sha256=eCuLuyxMmbj8A1E0VqYWoKA5JPTSbo6cmjS4LOyd0RQ,872
|
4
|
-
scmcp_shared/util.py,sha256=8_c6WPNpYNoxKpq6tQCC4elCQkWyk3rH-hTe1sqff4A,9535
|
5
|
-
scmcp_shared/schema/__init__.py,sha256=Kwkc7kPLjExOlxt1sWEy_5qa96MvOS8sNCMlZa6yRg8,737
|
6
|
-
scmcp_shared/schema/io.py,sha256=hmKMr5A8YRtPmGD3pwN9RPA8Urhp1WEMzEaNt7SnD7k,4636
|
7
|
-
scmcp_shared/schema/pl.py,sha256=rzE09wHMY3JR56HZc-QfIUUM0fGXRKd-7Dh3CrQrFB0,29547
|
8
|
-
scmcp_shared/schema/pp.py,sha256=48F6oKf-I8IZuNQDfq_Lpp3fLLKA4PruqRje_ZrtTyw,21664
|
9
|
-
scmcp_shared/schema/tl.py,sha256=DaZUce33OW67h-caK9BW4sD9zhlehmj3mCq1P-3vllM,34407
|
10
|
-
scmcp_shared/schema/util.py,sha256=x_2GPsmliHabi9V5C6YEv_M8ZHJsinDZJ6ePWrLPmcI,4815
|
11
|
-
scmcp_shared/server/__init__.py,sha256=4KE2Y_gDenF0ZyTGicQW0fTgJfMIQYZfpRP4hQ4rFYs,416
|
12
|
-
scmcp_shared/server/base.py,sha256=kaOfi4yHLWr_AdBdpKzDrJiwRmbHF2jbsfI5g2qqgRA,6576
|
13
|
-
scmcp_shared/server/io.py,sha256=tBi1D3ItOxuQmuq2fV9c9t9-J7JuaiPMcBB9UT-S-PM,3928
|
14
|
-
scmcp_shared/server/pl.py,sha256=HdhjrZfEx-IzCkZ03IGCW-mjUItfNvKdSOFbJ2_-2XQ,14854
|
15
|
-
scmcp_shared/server/pp.py,sha256=xWwW5Y5h-XdMYmSZjvACnoY7-4SfjharwI1GB6FcDPQ,15383
|
16
|
-
scmcp_shared/server/tl.py,sha256=qmWuSNplJtoa_92ivzAeCeyclGq2sW4Ao71_MHyk3es,18384
|
17
|
-
scmcp_shared/server/util.py,sha256=BGYbkbRKABlCgLAstqD1LutJwfiES0GfIOqMSpLw4FI,12205
|
18
|
-
scmcp_shared-0.3.6.dist-info/METADATA,sha256=byQeLeLTMtp_77wrbPORvmY4KLVKSRWxpDJW_Yo18PA,2355
|
19
|
-
scmcp_shared-0.3.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
20
|
-
scmcp_shared-0.3.6.dist-info/licenses/LICENSE,sha256=YNr1hpea195yq-wGtB8j-2dGtt7A5G00WENmxa7JGco,1495
|
21
|
-
scmcp_shared-0.3.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|