somm-mcp 0.6.1__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.
- somm_mcp-0.6.1/.gitignore +38 -0
- somm_mcp-0.6.1/PKG-INFO +34 -0
- somm_mcp-0.6.1/README.md +13 -0
- somm_mcp-0.6.1/pyproject.toml +36 -0
- somm_mcp-0.6.1/src/somm_mcp/__init__.py +13 -0
- somm_mcp-0.6.1/src/somm_mcp/cli.py +39 -0
- somm_mcp-0.6.1/src/somm_mcp/py.typed +0 -0
- somm_mcp-0.6.1/src/somm_mcp/server.py +830 -0
- somm_mcp-0.6.1/tests/test_server.py +106 -0
- somm_mcp-0.6.1/tests/test_sommelier_tools.py +166 -0
- somm_mcp-0.6.1/tests/test_tools.py +526 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
*.egg
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
|
|
10
|
+
# Environments
|
|
11
|
+
.venv/
|
|
12
|
+
.env
|
|
13
|
+
.env.*
|
|
14
|
+
|
|
15
|
+
# Tooling caches
|
|
16
|
+
.pytest_cache/
|
|
17
|
+
.mypy_cache/
|
|
18
|
+
.ruff_cache/
|
|
19
|
+
|
|
20
|
+
# Local Claude session id log (per-machine, not source of truth)
|
|
21
|
+
sessions.txt
|
|
22
|
+
|
|
23
|
+
# Local data (never commit telemetry)
|
|
24
|
+
.somm/
|
|
25
|
+
*.sqlite
|
|
26
|
+
*.sqlite-wal
|
|
27
|
+
*.sqlite-shm
|
|
28
|
+
|
|
29
|
+
# Author-local notes not for open source
|
|
30
|
+
notes/
|
|
31
|
+
.claude/
|
|
32
|
+
|
|
33
|
+
# Editor
|
|
34
|
+
.vscode/
|
|
35
|
+
.idea/
|
|
36
|
+
*.swp
|
|
37
|
+
|
|
38
|
+
# Archived internal design/process docs (see docs/BLUEPRINT.md for the public design doc)
|
somm_mcp-0.6.1/PKG-INFO
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: somm-mcp
|
|
3
|
+
Version: 0.6.1
|
|
4
|
+
Summary: somm MCP server — exposes telemetry + recommendations to coding agents
|
|
5
|
+
Project-URL: Homepage, https://github.com/lavallee/somm
|
|
6
|
+
Project-URL: Repository, https://github.com/lavallee/somm
|
|
7
|
+
Project-URL: Issues, https://github.com/lavallee/somm/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/lavallee/somm/blob/main/CHANGELOG.md
|
|
9
|
+
Author: Marc Lavallee
|
|
10
|
+
License: MIT
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
16
|
+
Requires-Python: >=3.12
|
|
17
|
+
Requires-Dist: mcp>=1.2
|
|
18
|
+
Requires-Dist: somm-core==0.6.1
|
|
19
|
+
Requires-Dist: somm==0.6.1
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# somm-mcp
|
|
23
|
+
|
|
24
|
+
MCP server for [somm](https://github.com/lavallee/somm) — lets
|
|
25
|
+
MCP-capable coding agents (Claude Code, Cursor, Windsurf) query your
|
|
26
|
+
real LLM telemetry and the cross-project sommelier.
|
|
27
|
+
|
|
28
|
+
Ships 10 stdio tools: somm_stats, somm_search_calls, somm_recommend,
|
|
29
|
+
somm_register_workload, somm_register_prompt, somm_compare,
|
|
30
|
+
somm_replay, somm_advise, somm_record_decision, somm_search_decisions.
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{ "command": "somm-mcp", "env": { "SOMM_PROJECT": "my_app" } }
|
|
34
|
+
```
|
somm_mcp-0.6.1/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# somm-mcp
|
|
2
|
+
|
|
3
|
+
MCP server for [somm](https://github.com/lavallee/somm) — lets
|
|
4
|
+
MCP-capable coding agents (Claude Code, Cursor, Windsurf) query your
|
|
5
|
+
real LLM telemetry and the cross-project sommelier.
|
|
6
|
+
|
|
7
|
+
Ships 10 stdio tools: somm_stats, somm_search_calls, somm_recommend,
|
|
8
|
+
somm_register_workload, somm_register_prompt, somm_compare,
|
|
9
|
+
somm_replay, somm_advise, somm_record_decision, somm_search_decisions.
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{ "command": "somm-mcp", "env": { "SOMM_PROJECT": "my_app" } }
|
|
13
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "somm-mcp"
|
|
3
|
+
version = "0.6.1"
|
|
4
|
+
description = "somm MCP server — exposes telemetry + recommendations to coding agents"
|
|
5
|
+
requires-python = ">=3.12"
|
|
6
|
+
license = { text = "MIT" }
|
|
7
|
+
readme = "README.md"
|
|
8
|
+
authors = [{ name = "Marc Lavallee" }]
|
|
9
|
+
classifiers = [
|
|
10
|
+
"Development Status :: 4 - Beta",
|
|
11
|
+
"License :: OSI Approved :: MIT License",
|
|
12
|
+
"Programming Language :: Python :: 3.12",
|
|
13
|
+
"Programming Language :: Python :: 3.13",
|
|
14
|
+
"Topic :: Software Development :: Libraries",
|
|
15
|
+
]
|
|
16
|
+
dependencies = [
|
|
17
|
+
"somm-core==0.6.1",
|
|
18
|
+
"somm==0.6.1",
|
|
19
|
+
"mcp>=1.2",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
[project.scripts]
|
|
23
|
+
somm-mcp = "somm_mcp.cli:main"
|
|
24
|
+
|
|
25
|
+
[project.urls]
|
|
26
|
+
Homepage = "https://github.com/lavallee/somm"
|
|
27
|
+
Repository = "https://github.com/lavallee/somm"
|
|
28
|
+
Issues = "https://github.com/lavallee/somm/issues"
|
|
29
|
+
Changelog = "https://github.com/lavallee/somm/blob/main/CHANGELOG.md"
|
|
30
|
+
|
|
31
|
+
[build-system]
|
|
32
|
+
requires = ["hatchling"]
|
|
33
|
+
build-backend = "hatchling.build"
|
|
34
|
+
|
|
35
|
+
[tool.hatch.build.targets.wheel]
|
|
36
|
+
packages = ["src/somm_mcp"]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""somm-mcp — MCP server exposing somm telemetry + recommendations.
|
|
2
|
+
|
|
3
|
+
Ships 10 stdio tools: `somm_stats`, `somm_search_calls`, `somm_recommend`,
|
|
4
|
+
`somm_register_workload`, `somm_register_prompt`, `somm_compare`,
|
|
5
|
+
`somm_replay`, `somm_advise`, `somm_record_decision`,
|
|
6
|
+
`somm_search_decisions`.
|
|
7
|
+
|
|
8
|
+
Transport: stdio (direct to somm-core).
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from somm_mcp.server import build_server
|
|
12
|
+
|
|
13
|
+
__all__ = ["build_server"]
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""`somm-mcp` CLI — runs the stdio MCP server with the full provider chain."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
from somm_core.config import Config
|
|
9
|
+
from somm_core.config import load as load_config
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def build_parser() -> argparse.ArgumentParser:
|
|
13
|
+
p = argparse.ArgumentParser(prog="somm-mcp", description="somm MCP server (stdio)")
|
|
14
|
+
p.add_argument("--project", default=None)
|
|
15
|
+
return p
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _providers_from_config(cfg: Config):
|
|
19
|
+
"""Build the default provider chain — the exact chain SommLLM builds,
|
|
20
|
+
so somm_compare / somm_replay can reach every provider the library can
|
|
21
|
+
(including gemini, deepseek, perplexity, and the CLI executors)."""
|
|
22
|
+
from somm.client import build_default_providers
|
|
23
|
+
|
|
24
|
+
return build_default_providers(cfg)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def main(argv: list[str] | None = None) -> int:
|
|
28
|
+
from somm_mcp.server import build_server
|
|
29
|
+
|
|
30
|
+
args = build_parser().parse_args(argv)
|
|
31
|
+
cfg = load_config(project=args.project)
|
|
32
|
+
providers = _providers_from_config(cfg)
|
|
33
|
+
server = build_server(cfg, providers=providers)
|
|
34
|
+
server.run()
|
|
35
|
+
return 0
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
if __name__ == "__main__":
|
|
39
|
+
sys.exit(main())
|
|
File without changes
|