rhinomcp 0.1.1__tar.gz → 0.1.1.2__tar.gz

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.
@@ -1,17 +1,17 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rhinomcp
3
- Version: 0.1.1
3
+ Version: 0.1.1.2
4
4
  Summary: Rhino integration through the Model Context Protocol
5
- Project-URL: Homepage, https://github.com/jingcheng-chen/rhinomcp
6
- Project-URL: Bug Tracker, https://github.com/jingcheng-chen/rhinomcp/issues
7
5
  Author-email: Jingcheng Chen <mail@jchen.ch>
8
6
  License: MIT
7
+ Project-URL: Homepage, https://github.com/jingcheng-chen/rhinomcp
8
+ Project-URL: Bug Tracker, https://github.com/jingcheng-chen/rhinomcp/issues
9
+ Classifier: Programming Language :: Python :: 3
9
10
  Classifier: License :: OSI Approved :: MIT License
10
11
  Classifier: Operating System :: OS Independent
11
- Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.10
13
- Requires-Dist: mcp[cli]>=1.3.0
14
13
  Description-Content-Type: text/markdown
14
+ Requires-Dist: mcp[cli]>=1.3.0
15
15
 
16
16
  # RhinoMCP - Rhino Model Context Protocol Integration
17
17
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "rhinomcp"
3
- version = "0.1.1"
3
+ version = "0.1.1.2"
4
4
  description = "Rhino integration through the Model Context Protocol"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -18,11 +18,15 @@ dependencies = [
18
18
  ]
19
19
 
20
20
  [project.scripts]
21
- rhinomcp = "rhinomcp.main:main"
21
+ rhinomcp = "rhinomcp.server:main"
22
22
 
23
23
  [build-system]
24
- requires = ["hatchling"]
25
- build-backend = "hatchling.build"
24
+ requires = ["setuptools>=61.0", "wheel"]
25
+ build-backend = "setuptools.build_meta"
26
+
27
+ [tool.setuptools]
28
+ package-dir = {"" = "src"}
29
+
26
30
 
27
31
  [project.urls]
28
32
  "Homepage" = "https://github.com/jingcheng-chen/rhinomcp"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -200,28 +200,10 @@ mcp = FastMCP(
200
200
 
201
201
  # Global connection for resources (since resources can't access context)
202
202
  _rhino_connection = None
203
- _polyhaven_enabled = False # Add this global variable
204
203
 
205
204
  def get_rhino_connection():
206
205
  """Get or create a persistent Rhino connection"""
207
- global _rhino_connection, _polyhaven_enabled # Add _polyhaven_enabled to globals
208
-
209
- # If we have an existing connection, check if it's still valid
210
- if _rhino_connection is not None:
211
- try:
212
- # First check if PolyHaven is enabled by sending a ping command
213
- result = _rhino_connection.send_command("get_polyhaven_status")
214
- # Store the PolyHaven status globally
215
- _polyhaven_enabled = result.get("enabled", False)
216
- return _rhino_connection
217
- except Exception as e:
218
- # Connection is dead, close it and create a new one
219
- logger.warning(f"Existing connection is no longer valid: {str(e)}")
220
- try:
221
- _rhino_connection.disconnect()
222
- except:
223
- pass
224
- _rhino_connection = None
206
+ global _rhino_connection
225
207
 
226
208
  # Create a new connection if needed
227
209
  if _rhino_connection is None:
@@ -236,29 +218,32 @@ def get_rhino_connection():
236
218
 
237
219
 
238
220
  @mcp.tool()
239
- def get_scene_info(ctx: Context) -> str:
240
- """Get detailed information about the current Rhino scene"""
221
+ def get_document_info(ctx: Context) -> str:
222
+ """Get detailed information about the current Rhino document"""
241
223
  try:
242
224
  rhino = get_rhino_connection()
243
- result = rhino.send_command("get_scene_info")
225
+ result = rhino.send_command("get_document_info")
244
226
 
245
227
  # Just return the JSON representation of what Rhino sent us
246
228
  return json.dumps(result, indent=2)
247
229
  except Exception as e:
248
- logger.error(f"Error getting scene info from Rhino: {str(e)}")
249
- return f"Error getting scene info: {str(e)}"
230
+ logger.error(f"Error getting document info from Rhino: {str(e)}")
231
+ return f"Error getting document info: {str(e)}"
250
232
 
251
233
  @mcp.tool()
252
- def get_object_info(ctx: Context, object_name: str) -> str:
234
+ def get_object_info(ctx: Context, id: str = None, name: str = None) -> str:
253
235
  """
254
- Get detailed information about a specific object in the Rhino scene.
236
+ Get detailed information about a specific object in the Rhino document.
237
+ You can either provide the id or the object_name of the object to get information about.
238
+ If both are provided, the id will be used.
255
239
 
256
240
  Parameters:
257
- - object_name: The name of the object to get information about
241
+ - id: The id of the object to get information about
242
+ - name: The name of the object to get information about
258
243
  """
259
244
  try:
260
245
  rhino = get_rhino_connection()
261
- result = rhino.send_command("get_object_info", {"name": object_name})
246
+ result = rhino.send_command("get_object_info", {"id": id, "name": name})
262
247
 
263
248
  # Just return the JSON representation of what Rhino sent us
264
249
  return json.dumps(result, indent=2)
@@ -266,6 +251,16 @@ def get_object_info(ctx: Context, object_name: str) -> str:
266
251
  logger.error(f"Error getting object info from Rhino: {str(e)}")
267
252
  return f"Error getting object info: {str(e)}"
268
253
 
254
+ @mcp.tool()
255
+ def get_selected_objects_info(ctx: Context) -> str:
256
+ """Get detailed information about the currently selected objects in Rhino"""
257
+ try:
258
+ rhino = get_rhino_connection()
259
+ result = rhino.send_command("get_selected_objects_info")
260
+ return json.dumps(result, indent=2)
261
+ except Exception as e:
262
+ logger.error(f"Error getting selected objects from Rhino: {str(e)}")
263
+ return f"Error getting selected objects: {str(e)}"
269
264
 
270
265
 
271
266
  @mcp.tool()
@@ -288,7 +283,7 @@ def create_object(
288
283
  generate_uvs: bool = True
289
284
  ) -> str:
290
285
  """
291
- Create a new object in the Rhino scene.
286
+ Create a new object in the Rhino document.
292
287
 
293
288
  Parameters:
294
289
  - type: Object type (CUBE, SPHERE, CYLINDER, PLANE, CONE, TORUS, EMPTY, CAMERA, LIGHT)
@@ -356,17 +351,21 @@ def create_object(
356
351
  @mcp.tool()
357
352
  def modify_object(
358
353
  ctx: Context,
359
- name: str,
354
+ id: str = None,
355
+ name: str = None,
356
+ new_name: str = None,
360
357
  location: List[float] = None,
361
358
  rotation: List[float] = None,
362
359
  scale: List[float] = None,
363
360
  visible: bool = None
364
361
  ) -> str:
365
362
  """
366
- Modify an existing object in the Rhino scene.
363
+ Modify an existing object in the Rhino document.
367
364
 
368
365
  Parameters:
369
- - name: Name of the object to modify
366
+ - id: The id of the object to modify
367
+ - name: The name of the object to modify
368
+ - new_name: Optional new name for the object
370
369
  - location: Optional [x, y, z] location coordinates
371
370
  - rotation: Optional [x, y, z] rotation in radians
372
371
  - scale: Optional [x, y, z] scale factors
@@ -376,8 +375,10 @@ def modify_object(
376
375
  # Get the global connection
377
376
  rhino = get_rhino_connection()
378
377
 
379
- params = {"name": name}
378
+ params = {"id": id, "name": name}
380
379
 
380
+ if new_name is not None:
381
+ params["new_name"] = new_name
381
382
  if location is not None:
382
383
  params["location"] = location
383
384
  if rotation is not None:
@@ -394,19 +395,20 @@ def modify_object(
394
395
  return f"Error modifying object: {str(e)}"
395
396
 
396
397
  @mcp.tool()
397
- def delete_object(ctx: Context, name: str) -> str:
398
+ def delete_object(ctx: Context, id: str = None, name: str = None) -> str:
398
399
  """
399
- Delete an object from the Rhino scene.
400
+ Delete an object from the Rhino document.
400
401
 
401
402
  Parameters:
402
- - name: Name of the object to delete
403
+ - id: The id of the object to delete
404
+ - name: The name of the object to delete
403
405
  """
404
406
  try:
405
407
  # Get the global connection
406
408
  rhino = get_rhino_connection()
407
409
 
408
- result = rhino.send_command("delete_object", {"name": name})
409
- return f"Deleted object: {name}"
410
+ result = rhino.send_command("delete_object", {"id": id, "name": name})
411
+ return f"Deleted object: {result['name']}"
410
412
  except Exception as e:
411
413
  logger.error(f"Error deleting object: {str(e)}")
412
414
  return f"Error deleting object: {str(e)}"
@@ -416,9 +418,9 @@ def asset_creation_strategy() -> str:
416
418
  """Defines the preferred strategy for creating assets in Rhino"""
417
419
  return """When creating 3D content in Rhino, always start by checking if integrations are available:
418
420
 
419
- 0. Before anything, always check the scene from get_scene_info()
421
+ 0. Before anything, always check the document from get_document_info()
420
422
  1. Use the method create_object() for basic primitives (CUBE, SPHERE, etc.)
421
- 2. When including an object into scene, ALWAYS make sure that the name of the object is meanful.
423
+ 2. When including an object into document, ALWAYS make sure that the name of the object is meanful.
422
424
  3. After giving the tool location/scale/rotation information (via create_object() and modify_object()),
423
425
  double check the related object's location, scale, rotation, and world_bounding_box using get_object_info(),
424
426
  so that the object is in the desired location.
@@ -0,0 +1,22 @@
1
+ Metadata-Version: 2.4
2
+ Name: rhinomcp
3
+ Version: 0.1.1.2
4
+ Summary: Rhino integration through the Model Context Protocol
5
+ Author-email: Jingcheng Chen <mail@jchen.ch>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/jingcheng-chen/rhinomcp
8
+ Project-URL: Bug Tracker, https://github.com/jingcheng-chen/rhinomcp/issues
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.10
13
+ Description-Content-Type: text/markdown
14
+ Requires-Dist: mcp[cli]>=1.3.0
15
+
16
+ # RhinoMCP - Rhino Model Context Protocol Integration
17
+
18
+ RhinoMCP connects Rhino to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control Rhino. This integration enables prompt assisted 3D modeling in Rhino 3D.
19
+
20
+ Please visit Github for complete information:
21
+
22
+ [Github](https://github.com/jingcheng-chen/rhinomcp)
@@ -0,0 +1,10 @@
1
+ README.md
2
+ pyproject.toml
3
+ src/rhinomcp/__init__.py
4
+ src/rhinomcp/server.py
5
+ src/rhinomcp.egg-info/PKG-INFO
6
+ src/rhinomcp.egg-info/SOURCES.txt
7
+ src/rhinomcp.egg-info/dependency_links.txt
8
+ src/rhinomcp.egg-info/entry_points.txt
9
+ src/rhinomcp.egg-info/requires.txt
10
+ src/rhinomcp.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ rhinomcp = rhinomcp.server:main
@@ -0,0 +1 @@
1
+ mcp[cli]>=1.3.0
@@ -0,0 +1 @@
1
+ rhinomcp
rhinomcp-0.1.1/.gitignore DELETED
@@ -1,74 +0,0 @@
1
- # Byte-compiled / optimized / DLL files
2
- __pycache__/
3
- *.py[cod]
4
- *$py.class
5
-
6
- # Virtual environments
7
- venv/
8
- .env/
9
- .venv/
10
- env/
11
- pip-wheel-metadata/
12
- pip-log.txt
13
-
14
- # Package metadata
15
- *.egg-info/
16
- *.dist-info/
17
- .installed.cfg
18
-
19
- # Build artifacts
20
- build/
21
- dist/
22
- wheelhouse/
23
-
24
- # Testing & coverage
25
- .coverage
26
- .coverage.*
27
- htmlcov/
28
- .tox/
29
- .nox/
30
- pytest_cache/
31
- nosetests.xml
32
- coverage.xml
33
- *.cover
34
-
35
- # Documentation
36
- docs/_build/
37
- *.rST~
38
-
39
- # Jupyter Notebook checkpoints
40
- .ipynb_checkpoints/
41
-
42
- # MyPy & type-checking
43
- .mypy_cache/
44
- .dmypy.json
45
- pyre-check/
46
-
47
- # IDE / Editor files
48
- .vscode/
49
- .idea/
50
- *.sublime-workspace
51
- *.sublime-project
52
-
53
- # Logs & Debugging
54
- logs/
55
- *.log
56
- *.out
57
- *.err
58
- debug.log
59
-
60
- # Local environment settings
61
- .env
62
- .envrc
63
- *.local
64
- *.secret
65
-
66
- # Docker
67
- .dockerignore
68
- docker-compose.override.yml
69
-
70
- # Rye, Poetry, and Pipenv lock files
71
- .poetry/
72
- rye.lock
73
- Pipfile
74
- Pipfile.lock
rhinomcp-0.1.1/main.py DELETED
@@ -1,8 +0,0 @@
1
- from rhinomcp.server import main as server_main
2
-
3
- def main():
4
- """Entry point for the rhinomcp package"""
5
- server_main()
6
-
7
- if __name__ == "__main__":
8
- main()
rhinomcp-0.1.1/uv.lock DELETED
@@ -1,393 +0,0 @@
1
- version = 1
2
- revision = 1
3
- requires-python = ">=3.10"
4
-
5
- [[package]]
6
- name = "annotated-types"
7
- version = "0.7.0"
8
- source = { registry = "https://pypi.org/simple" }
9
- sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
10
- wheels = [
11
- { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
12
- ]
13
-
14
- [[package]]
15
- name = "anyio"
16
- version = "4.9.0"
17
- source = { registry = "https://pypi.org/simple" }
18
- dependencies = [
19
- { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
20
- { name = "idna" },
21
- { name = "sniffio" },
22
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
23
- ]
24
- sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 }
25
- wheels = [
26
- { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 },
27
- ]
28
-
29
- [[package]]
30
- name = "certifi"
31
- version = "2025.1.31"
32
- source = { registry = "https://pypi.org/simple" }
33
- sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
34
- wheels = [
35
- { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
36
- ]
37
-
38
- [[package]]
39
- name = "click"
40
- version = "8.1.8"
41
- source = { registry = "https://pypi.org/simple" }
42
- dependencies = [
43
- { name = "colorama", marker = "sys_platform == 'win32'" },
44
- ]
45
- sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
46
- wheels = [
47
- { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 },
48
- ]
49
-
50
- [[package]]
51
- name = "colorama"
52
- version = "0.4.6"
53
- source = { registry = "https://pypi.org/simple" }
54
- sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
55
- wheels = [
56
- { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
57
- ]
58
-
59
- [[package]]
60
- name = "exceptiongroup"
61
- version = "1.2.2"
62
- source = { registry = "https://pypi.org/simple" }
63
- sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 }
64
- wheels = [
65
- { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 },
66
- ]
67
-
68
- [[package]]
69
- name = "h11"
70
- version = "0.14.0"
71
- source = { registry = "https://pypi.org/simple" }
72
- sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 }
73
- wheels = [
74
- { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 },
75
- ]
76
-
77
- [[package]]
78
- name = "httpcore"
79
- version = "1.0.7"
80
- source = { registry = "https://pypi.org/simple" }
81
- dependencies = [
82
- { name = "certifi" },
83
- { name = "h11" },
84
- ]
85
- sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 }
86
- wheels = [
87
- { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 },
88
- ]
89
-
90
- [[package]]
91
- name = "httpx"
92
- version = "0.28.1"
93
- source = { registry = "https://pypi.org/simple" }
94
- dependencies = [
95
- { name = "anyio" },
96
- { name = "certifi" },
97
- { name = "httpcore" },
98
- { name = "idna" },
99
- ]
100
- sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
101
- wheels = [
102
- { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
103
- ]
104
-
105
- [[package]]
106
- name = "httpx-sse"
107
- version = "0.4.0"
108
- source = { registry = "https://pypi.org/simple" }
109
- sdist = { url = "https://files.pythonhosted.org/packages/4c/60/8f4281fa9bbf3c8034fd54c0e7412e66edbab6bc74c4996bd616f8d0406e/httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721", size = 12624 }
110
- wheels = [
111
- { url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f", size = 7819 },
112
- ]
113
-
114
- [[package]]
115
- name = "idna"
116
- version = "3.10"
117
- source = { registry = "https://pypi.org/simple" }
118
- sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
119
- wheels = [
120
- { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
121
- ]
122
-
123
- [[package]]
124
- name = "markdown-it-py"
125
- version = "3.0.0"
126
- source = { registry = "https://pypi.org/simple" }
127
- dependencies = [
128
- { name = "mdurl" },
129
- ]
130
- sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 }
131
- wheels = [
132
- { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 },
133
- ]
134
-
135
- [[package]]
136
- name = "mcp"
137
- version = "1.5.0"
138
- source = { registry = "https://pypi.org/simple" }
139
- dependencies = [
140
- { name = "anyio" },
141
- { name = "httpx" },
142
- { name = "httpx-sse" },
143
- { name = "pydantic" },
144
- { name = "pydantic-settings" },
145
- { name = "sse-starlette" },
146
- { name = "starlette" },
147
- { name = "uvicorn" },
148
- ]
149
- sdist = { url = "https://files.pythonhosted.org/packages/6d/c9/c55764824e893fdebe777ac7223200986a275c3191dba9169f8eb6d7c978/mcp-1.5.0.tar.gz", hash = "sha256:5b2766c05e68e01a2034875e250139839498c61792163a7b221fc170c12f5aa9", size = 159128 }
150
- wheels = [
151
- { url = "https://files.pythonhosted.org/packages/c1/d1/3ff566ecf322077d861f1a68a1ff025cad337417bd66ad22a7c6f7dfcfaf/mcp-1.5.0-py3-none-any.whl", hash = "sha256:51c3f35ce93cb702f7513c12406bbea9665ef75a08db909200b07da9db641527", size = 73734 },
152
- ]
153
-
154
- [package.optional-dependencies]
155
- cli = [
156
- { name = "python-dotenv" },
157
- { name = "typer" },
158
- ]
159
-
160
- [[package]]
161
- name = "mdurl"
162
- version = "0.1.2"
163
- source = { registry = "https://pypi.org/simple" }
164
- sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 }
165
- wheels = [
166
- { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
167
- ]
168
-
169
- [[package]]
170
- name = "pydantic"
171
- version = "2.10.6"
172
- source = { registry = "https://pypi.org/simple" }
173
- dependencies = [
174
- { name = "annotated-types" },
175
- { name = "pydantic-core" },
176
- { name = "typing-extensions" },
177
- ]
178
- sdist = { url = "https://files.pythonhosted.org/packages/b7/ae/d5220c5c52b158b1de7ca89fc5edb72f304a70a4c540c84c8844bf4008de/pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236", size = 761681 }
179
- wheels = [
180
- { url = "https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", size = 431696 },
181
- ]
182
-
183
- [[package]]
184
- name = "pydantic-core"
185
- version = "2.27.2"
186
- source = { registry = "https://pypi.org/simple" }
187
- dependencies = [
188
- { name = "typing-extensions" },
189
- ]
190
- sdist = { url = "https://files.pythonhosted.org/packages/fc/01/f3e5ac5e7c25833db5eb555f7b7ab24cd6f8c322d3a3ad2d67a952dc0abc/pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", size = 413443 }
191
- wheels = [
192
- { url = "https://files.pythonhosted.org/packages/3a/bc/fed5f74b5d802cf9a03e83f60f18864e90e3aed7223adaca5ffb7a8d8d64/pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa", size = 1895938 },
193
- { url = "https://files.pythonhosted.org/packages/71/2a/185aff24ce844e39abb8dd680f4e959f0006944f4a8a0ea372d9f9ae2e53/pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c", size = 1815684 },
194
- { url = "https://files.pythonhosted.org/packages/c3/43/fafabd3d94d159d4f1ed62e383e264f146a17dd4d48453319fd782e7979e/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a", size = 1829169 },
195
- { url = "https://files.pythonhosted.org/packages/a2/d1/f2dfe1a2a637ce6800b799aa086d079998959f6f1215eb4497966efd2274/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5", size = 1867227 },
196
- { url = "https://files.pythonhosted.org/packages/7d/39/e06fcbcc1c785daa3160ccf6c1c38fea31f5754b756e34b65f74e99780b5/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c", size = 2037695 },
197
- { url = "https://files.pythonhosted.org/packages/7a/67/61291ee98e07f0650eb756d44998214231f50751ba7e13f4f325d95249ab/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7", size = 2741662 },
198
- { url = "https://files.pythonhosted.org/packages/32/90/3b15e31b88ca39e9e626630b4c4a1f5a0dfd09076366f4219429e6786076/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a", size = 1993370 },
199
- { url = "https://files.pythonhosted.org/packages/ff/83/c06d333ee3a67e2e13e07794995c1535565132940715931c1c43bfc85b11/pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236", size = 1996813 },
200
- { url = "https://files.pythonhosted.org/packages/7c/f7/89be1c8deb6e22618a74f0ca0d933fdcb8baa254753b26b25ad3acff8f74/pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962", size = 2005287 },
201
- { url = "https://files.pythonhosted.org/packages/b7/7d/8eb3e23206c00ef7feee17b83a4ffa0a623eb1a9d382e56e4aa46fd15ff2/pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9", size = 2128414 },
202
- { url = "https://files.pythonhosted.org/packages/4e/99/fe80f3ff8dd71a3ea15763878d464476e6cb0a2db95ff1c5c554133b6b83/pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af", size = 2155301 },
203
- { url = "https://files.pythonhosted.org/packages/2b/a3/e50460b9a5789ca1451b70d4f52546fa9e2b420ba3bfa6100105c0559238/pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4", size = 1816685 },
204
- { url = "https://files.pythonhosted.org/packages/57/4c/a8838731cb0f2c2a39d3535376466de6049034d7b239c0202a64aaa05533/pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31", size = 1982876 },
205
- { url = "https://files.pythonhosted.org/packages/c2/89/f3450af9d09d44eea1f2c369f49e8f181d742f28220f88cc4dfaae91ea6e/pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", size = 1893421 },
206
- { url = "https://files.pythonhosted.org/packages/9e/e3/71fe85af2021f3f386da42d291412e5baf6ce7716bd7101ea49c810eda90/pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", size = 1814998 },
207
- { url = "https://files.pythonhosted.org/packages/a6/3c/724039e0d848fd69dbf5806894e26479577316c6f0f112bacaf67aa889ac/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", size = 1826167 },
208
- { url = "https://files.pythonhosted.org/packages/2b/5b/1b29e8c1fb5f3199a9a57c1452004ff39f494bbe9bdbe9a81e18172e40d3/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", size = 1865071 },
209
- { url = "https://files.pythonhosted.org/packages/89/6c/3985203863d76bb7d7266e36970d7e3b6385148c18a68cc8915fd8c84d57/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", size = 2036244 },
210
- { url = "https://files.pythonhosted.org/packages/0e/41/f15316858a246b5d723f7d7f599f79e37493b2e84bfc789e58d88c209f8a/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", size = 2737470 },
211
- { url = "https://files.pythonhosted.org/packages/a8/7c/b860618c25678bbd6d1d99dbdfdf0510ccb50790099b963ff78a124b754f/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", size = 1992291 },
212
- { url = "https://files.pythonhosted.org/packages/bf/73/42c3742a391eccbeab39f15213ecda3104ae8682ba3c0c28069fbcb8c10d/pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", size = 1994613 },
213
- { url = "https://files.pythonhosted.org/packages/94/7a/941e89096d1175d56f59340f3a8ebaf20762fef222c298ea96d36a6328c5/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", size = 2002355 },
214
- { url = "https://files.pythonhosted.org/packages/6e/95/2359937a73d49e336a5a19848713555605d4d8d6940c3ec6c6c0ca4dcf25/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", size = 2126661 },
215
- { url = "https://files.pythonhosted.org/packages/2b/4c/ca02b7bdb6012a1adef21a50625b14f43ed4d11f1fc237f9d7490aa5078c/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", size = 2153261 },
216
- { url = "https://files.pythonhosted.org/packages/72/9d/a241db83f973049a1092a079272ffe2e3e82e98561ef6214ab53fe53b1c7/pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", size = 1812361 },
217
- { url = "https://files.pythonhosted.org/packages/e8/ef/013f07248041b74abd48a385e2110aa3a9bbfef0fbd97d4e6d07d2f5b89a/pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", size = 1982484 },
218
- { url = "https://files.pythonhosted.org/packages/10/1c/16b3a3e3398fd29dca77cea0a1d998d6bde3902fa2706985191e2313cc76/pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", size = 1867102 },
219
- { url = "https://files.pythonhosted.org/packages/d6/74/51c8a5482ca447871c93e142d9d4a92ead74de6c8dc5e66733e22c9bba89/pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", size = 1893127 },
220
- { url = "https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", size = 1811340 },
221
- { url = "https://files.pythonhosted.org/packages/9e/91/840ec1375e686dbae1bd80a9e46c26a1e0083e1186abc610efa3d9a36180/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", size = 1822900 },
222
- { url = "https://files.pythonhosted.org/packages/f6/31/4240bc96025035500c18adc149aa6ffdf1a0062a4b525c932065ceb4d868/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", size = 1869177 },
223
- { url = "https://files.pythonhosted.org/packages/fa/20/02fbaadb7808be578317015c462655c317a77a7c8f0ef274bc016a784c54/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", size = 2038046 },
224
- { url = "https://files.pythonhosted.org/packages/06/86/7f306b904e6c9eccf0668248b3f272090e49c275bc488a7b88b0823444a4/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", size = 2685386 },
225
- { url = "https://files.pythonhosted.org/packages/8d/f0/49129b27c43396581a635d8710dae54a791b17dfc50c70164866bbf865e3/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", size = 1997060 },
226
- { url = "https://files.pythonhosted.org/packages/0d/0f/943b4af7cd416c477fd40b187036c4f89b416a33d3cc0ab7b82708a667aa/pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", size = 2004870 },
227
- { url = "https://files.pythonhosted.org/packages/35/40/aea70b5b1a63911c53a4c8117c0a828d6790483f858041f47bab0b779f44/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", size = 1999822 },
228
- { url = "https://files.pythonhosted.org/packages/f2/b3/807b94fd337d58effc5498fd1a7a4d9d59af4133e83e32ae39a96fddec9d/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", size = 2130364 },
229
- { url = "https://files.pythonhosted.org/packages/fc/df/791c827cd4ee6efd59248dca9369fb35e80a9484462c33c6649a8d02b565/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", size = 2158303 },
230
- { url = "https://files.pythonhosted.org/packages/9b/67/4e197c300976af185b7cef4c02203e175fb127e414125916bf1128b639a9/pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", size = 1834064 },
231
- { url = "https://files.pythonhosted.org/packages/1f/ea/cd7209a889163b8dcca139fe32b9687dd05249161a3edda62860430457a5/pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", size = 1989046 },
232
- { url = "https://files.pythonhosted.org/packages/bc/49/c54baab2f4658c26ac633d798dab66b4c3a9bbf47cff5284e9c182f4137a/pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", size = 1885092 },
233
- { url = "https://files.pythonhosted.org/packages/41/b1/9bc383f48f8002f99104e3acff6cba1231b29ef76cfa45d1506a5cad1f84/pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", size = 1892709 },
234
- { url = "https://files.pythonhosted.org/packages/10/6c/e62b8657b834f3eb2961b49ec8e301eb99946245e70bf42c8817350cbefc/pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", size = 1811273 },
235
- { url = "https://files.pythonhosted.org/packages/ba/15/52cfe49c8c986e081b863b102d6b859d9defc63446b642ccbbb3742bf371/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", size = 1823027 },
236
- { url = "https://files.pythonhosted.org/packages/b1/1c/b6f402cfc18ec0024120602bdbcebc7bdd5b856528c013bd4d13865ca473/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", size = 1868888 },
237
- { url = "https://files.pythonhosted.org/packages/bd/7b/8cb75b66ac37bc2975a3b7de99f3c6f355fcc4d89820b61dffa8f1e81677/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", size = 2037738 },
238
- { url = "https://files.pythonhosted.org/packages/c8/f1/786d8fe78970a06f61df22cba58e365ce304bf9b9f46cc71c8c424e0c334/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", size = 2685138 },
239
- { url = "https://files.pythonhosted.org/packages/a6/74/d12b2cd841d8724dc8ffb13fc5cef86566a53ed358103150209ecd5d1999/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", size = 1997025 },
240
- { url = "https://files.pythonhosted.org/packages/a0/6e/940bcd631bc4d9a06c9539b51f070b66e8f370ed0933f392db6ff350d873/pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", size = 2004633 },
241
- { url = "https://files.pythonhosted.org/packages/50/cc/a46b34f1708d82498c227d5d80ce615b2dd502ddcfd8376fc14a36655af1/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", size = 1999404 },
242
- { url = "https://files.pythonhosted.org/packages/ca/2d/c365cfa930ed23bc58c41463bae347d1005537dc8db79e998af8ba28d35e/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", size = 2130130 },
243
- { url = "https://files.pythonhosted.org/packages/f4/d7/eb64d015c350b7cdb371145b54d96c919d4db516817f31cd1c650cae3b21/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", size = 2157946 },
244
- { url = "https://files.pythonhosted.org/packages/a4/99/bddde3ddde76c03b65dfd5a66ab436c4e58ffc42927d4ff1198ffbf96f5f/pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", size = 1834387 },
245
- { url = "https://files.pythonhosted.org/packages/71/47/82b5e846e01b26ac6f1893d3c5f9f3a2eb6ba79be26eef0b759b4fe72946/pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", size = 1990453 },
246
- { url = "https://files.pythonhosted.org/packages/51/b2/b2b50d5ecf21acf870190ae5d093602d95f66c9c31f9d5de6062eb329ad1/pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", size = 1885186 },
247
- { url = "https://files.pythonhosted.org/packages/46/72/af70981a341500419e67d5cb45abe552a7c74b66326ac8877588488da1ac/pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e", size = 1891159 },
248
- { url = "https://files.pythonhosted.org/packages/ad/3d/c5913cccdef93e0a6a95c2d057d2c2cba347815c845cda79ddd3c0f5e17d/pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8", size = 1768331 },
249
- { url = "https://files.pythonhosted.org/packages/f6/f0/a3ae8fbee269e4934f14e2e0e00928f9346c5943174f2811193113e58252/pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3", size = 1822467 },
250
- { url = "https://files.pythonhosted.org/packages/d7/7a/7bbf241a04e9f9ea24cd5874354a83526d639b02674648af3f350554276c/pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f", size = 1979797 },
251
- { url = "https://files.pythonhosted.org/packages/4f/5f/4784c6107731f89e0005a92ecb8a2efeafdb55eb992b8e9d0a2be5199335/pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133", size = 1987839 },
252
- { url = "https://files.pythonhosted.org/packages/6d/a7/61246562b651dff00de86a5f01b6e4befb518df314c54dec187a78d81c84/pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc", size = 1998861 },
253
- { url = "https://files.pythonhosted.org/packages/86/aa/837821ecf0c022bbb74ca132e117c358321e72e7f9702d1b6a03758545e2/pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50", size = 2116582 },
254
- { url = "https://files.pythonhosted.org/packages/81/b0/5e74656e95623cbaa0a6278d16cf15e10a51f6002e3ec126541e95c29ea3/pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9", size = 2151985 },
255
- { url = "https://files.pythonhosted.org/packages/63/37/3e32eeb2a451fddaa3898e2163746b0cffbbdbb4740d38372db0490d67f3/pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151", size = 2004715 },
256
- ]
257
-
258
- [[package]]
259
- name = "pydantic-settings"
260
- version = "2.8.1"
261
- source = { registry = "https://pypi.org/simple" }
262
- dependencies = [
263
- { name = "pydantic" },
264
- { name = "python-dotenv" },
265
- ]
266
- sdist = { url = "https://files.pythonhosted.org/packages/88/82/c79424d7d8c29b994fb01d277da57b0a9b09cc03c3ff875f9bd8a86b2145/pydantic_settings-2.8.1.tar.gz", hash = "sha256:d5c663dfbe9db9d5e1c646b2e161da12f0d734d422ee56f567d0ea2cee4e8585", size = 83550 }
267
- wheels = [
268
- { url = "https://files.pythonhosted.org/packages/0b/53/a64f03044927dc47aafe029c42a5b7aabc38dfb813475e0e1bf71c4a59d0/pydantic_settings-2.8.1-py3-none-any.whl", hash = "sha256:81942d5ac3d905f7f3ee1a70df5dfb62d5569c12f51a5a647defc1c3d9ee2e9c", size = 30839 },
269
- ]
270
-
271
- [[package]]
272
- name = "pygments"
273
- version = "2.19.1"
274
- source = { registry = "https://pypi.org/simple" }
275
- sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 }
276
- wheels = [
277
- { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 },
278
- ]
279
-
280
- [[package]]
281
- name = "python-dotenv"
282
- version = "1.0.1"
283
- source = { registry = "https://pypi.org/simple" }
284
- sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115 }
285
- wheels = [
286
- { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 },
287
- ]
288
-
289
- [[package]]
290
- name = "rhinomcp"
291
- version = "0.1.0"
292
- source = { editable = "." }
293
- dependencies = [
294
- { name = "mcp", extra = ["cli"] },
295
- ]
296
-
297
- [package.metadata]
298
- requires-dist = [{ name = "mcp", extras = ["cli"], specifier = ">=1.3.0" }]
299
-
300
- [[package]]
301
- name = "rich"
302
- version = "13.9.4"
303
- source = { registry = "https://pypi.org/simple" }
304
- dependencies = [
305
- { name = "markdown-it-py" },
306
- { name = "pygments" },
307
- { name = "typing-extensions", marker = "python_full_version < '3.11'" },
308
- ]
309
- sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 }
310
- wheels = [
311
- { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 },
312
- ]
313
-
314
- [[package]]
315
- name = "shellingham"
316
- version = "1.5.4"
317
- source = { registry = "https://pypi.org/simple" }
318
- sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 }
319
- wheels = [
320
- { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 },
321
- ]
322
-
323
- [[package]]
324
- name = "sniffio"
325
- version = "1.3.1"
326
- source = { registry = "https://pypi.org/simple" }
327
- sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
328
- wheels = [
329
- { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
330
- ]
331
-
332
- [[package]]
333
- name = "sse-starlette"
334
- version = "2.2.1"
335
- source = { registry = "https://pypi.org/simple" }
336
- dependencies = [
337
- { name = "anyio" },
338
- { name = "starlette" },
339
- ]
340
- sdist = { url = "https://files.pythonhosted.org/packages/71/a4/80d2a11af59fe75b48230846989e93979c892d3a20016b42bb44edb9e398/sse_starlette-2.2.1.tar.gz", hash = "sha256:54470d5f19274aeed6b2d473430b08b4b379ea851d953b11d7f1c4a2c118b419", size = 17376 }
341
- wheels = [
342
- { url = "https://files.pythonhosted.org/packages/d9/e0/5b8bd393f27f4a62461c5cf2479c75a2cc2ffa330976f9f00f5f6e4f50eb/sse_starlette-2.2.1-py3-none-any.whl", hash = "sha256:6410a3d3ba0c89e7675d4c273a301d64649c03a5ef1ca101f10b47f895fd0e99", size = 10120 },
343
- ]
344
-
345
- [[package]]
346
- name = "starlette"
347
- version = "0.46.1"
348
- source = { registry = "https://pypi.org/simple" }
349
- dependencies = [
350
- { name = "anyio" },
351
- ]
352
- sdist = { url = "https://files.pythonhosted.org/packages/04/1b/52b27f2e13ceedc79a908e29eac426a63465a1a01248e5f24aa36a62aeb3/starlette-0.46.1.tar.gz", hash = "sha256:3c88d58ee4bd1bb807c0d1acb381838afc7752f9ddaec81bbe4383611d833230", size = 2580102 }
353
- wheels = [
354
- { url = "https://files.pythonhosted.org/packages/a0/4b/528ccf7a982216885a1ff4908e886b8fb5f19862d1962f56a3fce2435a70/starlette-0.46.1-py3-none-any.whl", hash = "sha256:77c74ed9d2720138b25875133f3a2dae6d854af2ec37dceb56aef370c1d8a227", size = 71995 },
355
- ]
356
-
357
- [[package]]
358
- name = "typer"
359
- version = "0.15.2"
360
- source = { registry = "https://pypi.org/simple" }
361
- dependencies = [
362
- { name = "click" },
363
- { name = "rich" },
364
- { name = "shellingham" },
365
- { name = "typing-extensions" },
366
- ]
367
- sdist = { url = "https://files.pythonhosted.org/packages/8b/6f/3991f0f1c7fcb2df31aef28e0594d8d54b05393a0e4e34c65e475c2a5d41/typer-0.15.2.tar.gz", hash = "sha256:ab2fab47533a813c49fe1f16b1a370fd5819099c00b119e0633df65f22144ba5", size = 100711 }
368
- wheels = [
369
- { url = "https://files.pythonhosted.org/packages/7f/fc/5b29fea8cee020515ca82cc68e3b8e1e34bb19a3535ad854cac9257b414c/typer-0.15.2-py3-none-any.whl", hash = "sha256:46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc", size = 45061 },
370
- ]
371
-
372
- [[package]]
373
- name = "typing-extensions"
374
- version = "4.12.2"
375
- source = { registry = "https://pypi.org/simple" }
376
- sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 }
377
- wheels = [
378
- { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 },
379
- ]
380
-
381
- [[package]]
382
- name = "uvicorn"
383
- version = "0.34.0"
384
- source = { registry = "https://pypi.org/simple" }
385
- dependencies = [
386
- { name = "click" },
387
- { name = "h11" },
388
- { name = "typing-extensions", marker = "python_full_version < '3.11'" },
389
- ]
390
- sdist = { url = "https://files.pythonhosted.org/packages/4b/4d/938bd85e5bf2edeec766267a5015ad969730bb91e31b44021dfe8b22df6c/uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9", size = 76568 }
391
- wheels = [
392
- { url = "https://files.pythonhosted.org/packages/61/14/33a3a1352cfa71812a3a21e8c9bfb83f60b0011f5e36f2b1399d51928209/uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4", size = 62315 },
393
- ]
File without changes