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/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: TSNEModel=TSNEModel(), adinfo: self.AdataInfo=self.AdataInfo()):
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: UMAPModel=UMAPModel(), adinfo: self.AdataInfo=self.AdataInfo()):
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: DrawGraphModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: DiffMapModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: EmbeddingDensityModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: LeidenModel=LeidenModel(), adinfo: self.AdataInfo=self.AdataInfo()):
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: LouvainModel=LouvainModel(), adinfo: self.AdataInfo=self.AdataInfo()):
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: DendrogramModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: DPTModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: PAGAModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: IngestModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: RankGenesGroupsModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: FilterRankGenesGroupsModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: MarkerGeneOverlapModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: ScoreGenesModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: ScoreGenesCellCycleModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: PCAModel=PCAModel(), adinfo: self.AdataInfo=self.AdataInfo()):
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")
@@ -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 AdataModel, AdataInfo
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: QueryOpLogModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: MarkVarModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: ListVarModel=ListVarModel(), adinfo: self.AdataInfo=self.AdataInfo()):
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: ListObsModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: VarNamesModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: ConcatBaseModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: DPTIROOTModel, adinfo: self.AdataInfo=self.AdataInfo()):
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: AddLayerModel, adinfo: self.AdataInfo=self.AdataInfo()):
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.6
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.3.4
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,,