refactor(common): rename package option_mcp_common → mcp_common

This commit is contained in:
AdrianoDev
2026-04-27 17:37:35 +02:00
parent 563f4fc965
commit e888fc373d
48 changed files with 2394 additions and 74 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
[project] [project]
name = "option-mcp-common" name = "mcp-common"
version = "0.1.0" version = "0.1.0"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [
@@ -20,4 +20,4 @@ requires = ["hatchling"]
build-backend = "hatchling.build" build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel] [tool.hatch.build.targets.wheel]
packages = ["src/option_mcp_common"] packages = ["src/mcp_common"]
@@ -1,4 +1,4 @@
from option_mcp_common.models import ( from mcp_common.models import (
Event, Event,
EventPriority, EventPriority,
EventType, EventType,
@@ -2,7 +2,7 @@
Usage al boot di ogni mcp `__main__.py`: Usage al boot di ogni mcp `__main__.py`:
from option_mcp_common.env_validation import require_env, optional_env, summarize from mcp_common.env_validation import require_env, optional_env, summarize
creds_file = require_env("CREDENTIALS_FILE", "deribit credentials JSON path") creds_file = require_env("CREDENTIALS_FILE", "deribit credentials JSON path")
host = optional_env("HOST", default="0.0.0.0") host = optional_env("HOST", default="0.0.0.0")
@@ -27,7 +27,7 @@ import httpx
from fastapi import FastAPI, Request from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from option_mcp_common.auth import TokenStore from mcp_common.auth import TokenStore
MCP_PROTOCOL_VERSION = "2024-11-05" MCP_PROTOCOL_VERSION = "2024-11-05"
@@ -14,7 +14,7 @@ from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse, Response from fastapi.responses import JSONResponse, Response
from starlette.middleware.base import BaseHTTPMiddleware from starlette.middleware.base import BaseHTTPMiddleware
from option_mcp_common.auth import TokenStore from mcp_common.auth import TokenStore
Lifespan = Callable[[FastAPI], AbstractAsyncContextManager[None]] Lifespan = Callable[[FastAPI], AbstractAsyncContextManager[None]]
+1 -1
View File
@@ -1,7 +1,7 @@
import pytest import pytest
from fastapi import Depends, FastAPI from fastapi import Depends, FastAPI
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from option_mcp_common.auth import ( from mcp_common.auth import (
Principal, Principal,
TokenStore, TokenStore,
acl_requires, acl_requires,
+2 -2
View File
@@ -3,7 +3,7 @@
from __future__ import annotations from __future__ import annotations
import pytest import pytest
from option_mcp_common.env_validation import ( from mcp_common.env_validation import (
MissingEnvError, MissingEnvError,
fail_fast_if_missing, fail_fast_if_missing,
optional_env, optional_env,
@@ -63,7 +63,7 @@ def test_summarize_does_not_leak_secrets(monkeypatch, caplog):
import logging import logging
monkeypatch.setenv("API_KEY_FOO", "super-secret-token-123456") monkeypatch.setenv("API_KEY_FOO", "super-secret-token-123456")
monkeypatch.setenv("PORT", "9000") monkeypatch.setenv("PORT", "9000")
with caplog.at_level(logging.INFO, logger="option_mcp_common.env_validation"): with caplog.at_level(logging.INFO, logger="mcp_common.env_validation"):
summarize(["API_KEY_FOO", "PORT", "NOT_SET_XYZ"]) summarize(["API_KEY_FOO", "PORT", "NOT_SET_XYZ"])
log_text = "\n".join(caplog.messages) log_text = "\n".join(caplog.messages)
assert "super-secret-token-123456" not in log_text assert "super-secret-token-123456" not in log_text
+1 -1
View File
@@ -1,5 +1,5 @@
from option_mcp_common.indicators import adx, atr, macd, rsi, sma from mcp_common.indicators import adx, atr, macd, rsi, sma
def test_rsi_simple(): def test_rsi_simple():
+1 -1
View File
@@ -1,7 +1,7 @@
import json import json
import logging import logging
from option_mcp_common.logging import ( from mcp_common.logging import (
SecretsFilter, SecretsFilter,
configure_root_logging, configure_root_logging,
get_json_logger, get_json_logger,
+3 -3
View File
@@ -2,9 +2,9 @@ from __future__ import annotations
from fastapi import Depends, FastAPI from fastapi import Depends, FastAPI
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from option_mcp_common.auth import Principal, TokenStore, require_principal from mcp_common.auth import Principal, TokenStore, require_principal
from option_mcp_common.mcp_bridge import _derive_input_schemas, mount_mcp_endpoint from mcp_common.mcp_bridge import _derive_input_schemas, mount_mcp_endpoint
from option_mcp_common.server import build_app from mcp_common.server import build_app
from pydantic import BaseModel from pydantic import BaseModel
+1 -1
View File
@@ -1,4 +1,4 @@
from option_mcp_common.models import EventPriority, EventType, L2Entry from mcp_common.models import EventPriority, EventType, L2Entry
def test_l2_entry_minimal(): def test_l2_entry_minimal():
+1 -1
View File
@@ -4,7 +4,7 @@ from __future__ import annotations
import pytest import pytest
from fastapi import HTTPException from fastapi import HTTPException
from option_mcp_common.risk_guard import ( from mcp_common.risk_guard import (
enforce_aggregate, enforce_aggregate,
enforce_leverage, enforce_leverage,
enforce_single_notional, enforce_single_notional,
+2 -2
View File
@@ -1,6 +1,6 @@
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from option_mcp_common.auth import Principal, TokenStore from mcp_common.auth import Principal, TokenStore
from option_mcp_common.server import build_app from mcp_common.server import build_app
def test_build_app_health(): def test_build_app_health():
+1 -1
View File
@@ -1,6 +1,6 @@
from pathlib import Path from pathlib import Path
from option_mcp_common.storage import Database, run_migrations from mcp_common.storage import Database, run_migrations
def test_database_creates_wal(tmp_path: Path): def test_database_creates_wal(tmp_path: Path):
+2 -2
View File
@@ -3,7 +3,7 @@ name = "mcp-alpaca"
version = "0.1.0" version = "0.1.0"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [
"option-mcp-common", "mcp-common",
"fastapi>=0.115", "fastapi>=0.115",
"uvicorn[standard]>=0.30", "uvicorn[standard]>=0.30",
"httpx>=0.27", "httpx>=0.27",
@@ -23,7 +23,7 @@ build-backend = "hatchling.build"
packages = ["src/mcp_alpaca"] packages = ["src/mcp_alpaca"]
[tool.uv.sources] [tool.uv.sources]
option-mcp-common = { workspace = true } mcp-common = { workspace = true }
[project.scripts] [project.scripts]
mcp-alpaca = "mcp_alpaca.__main__:main" mcp-alpaca = "mcp_alpaca.__main__:main"
@@ -4,8 +4,8 @@ import json
import os import os
import uvicorn import uvicorn
from option_mcp_common.auth import load_token_store_from_files from mcp_common.auth import load_token_store_from_files
from option_mcp_common.logging import configure_root_logging from mcp_common.logging import configure_root_logging
from mcp_alpaca.client import AlpacaClient from mcp_alpaca.client import AlpacaClient
from mcp_alpaca.server import create_app from mcp_alpaca.server import create_app
+3 -3
View File
@@ -3,9 +3,9 @@ from __future__ import annotations
import os import os
from fastapi import Depends, HTTPException from fastapi import Depends, HTTPException
from option_mcp_common.auth import Principal, TokenStore, require_principal from mcp_common.auth import Principal, TokenStore, require_principal
from option_mcp_common.mcp_bridge import mount_mcp_endpoint from mcp_common.mcp_bridge import mount_mcp_endpoint
from option_mcp_common.server import build_app from mcp_common.server import build_app
from pydantic import BaseModel from pydantic import BaseModel
from mcp_alpaca.client import AlpacaClient from mcp_alpaca.client import AlpacaClient
+1 -1
View File
@@ -4,7 +4,7 @@ from unittest.mock import AsyncMock, MagicMock
import pytest import pytest
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from option_mcp_common.auth import Principal, TokenStore from mcp_common.auth import Principal, TokenStore
from mcp_alpaca.server import create_app from mcp_alpaca.server import create_app
+2 -2
View File
@@ -3,7 +3,7 @@ name = "mcp-bybit"
version = "0.1.0" version = "0.1.0"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [
"option-mcp-common", "mcp-common",
"fastapi>=0.115", "fastapi>=0.115",
"uvicorn[standard]>=0.30", "uvicorn[standard]>=0.30",
"httpx>=0.27", "httpx>=0.27",
@@ -22,7 +22,7 @@ build-backend = "hatchling.build"
packages = ["src/mcp_bybit"] packages = ["src/mcp_bybit"]
[tool.uv.sources] [tool.uv.sources]
option-mcp-common = { workspace = true } mcp-common = { workspace = true }
[project.scripts] [project.scripts]
mcp-bybit = "mcp_bybit.__main__:main" mcp-bybit = "mcp_bybit.__main__:main"
+2 -2
View File
@@ -4,8 +4,8 @@ import json
import os import os
import uvicorn import uvicorn
from option_mcp_common.auth import load_token_store_from_files from mcp_common.auth import load_token_store_from_files
from option_mcp_common.logging import configure_root_logging from mcp_common.logging import configure_root_logging
from mcp_bybit.client import BybitClient from mcp_bybit.client import BybitClient
from mcp_bybit.server import create_app from mcp_bybit.server import create_app
+1 -1
View File
@@ -3,7 +3,7 @@ from __future__ import annotations
import asyncio import asyncio
from typing import Any from typing import Any
from option_mcp_common import indicators as ind from mcp_common import indicators as ind
from pybit.unified_trading import HTTP from pybit.unified_trading import HTTP
+3 -3
View File
@@ -3,9 +3,9 @@ from __future__ import annotations
import os import os
from fastapi import Depends, HTTPException from fastapi import Depends, HTTPException
from option_mcp_common.auth import Principal, TokenStore, require_principal from mcp_common.auth import Principal, TokenStore, require_principal
from option_mcp_common.mcp_bridge import mount_mcp_endpoint from mcp_common.mcp_bridge import mount_mcp_endpoint
from option_mcp_common.server import build_app from mcp_common.server import build_app
from pydantic import BaseModel from pydantic import BaseModel
from mcp_bybit.client import BybitClient from mcp_bybit.client import BybitClient
+1 -1
View File
@@ -4,7 +4,7 @@ from unittest.mock import AsyncMock, MagicMock
import pytest import pytest
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from option_mcp_common.auth import Principal, TokenStore from mcp_common.auth import Principal, TokenStore
from mcp_bybit.server import create_app from mcp_bybit.server import create_app
+2 -2
View File
@@ -3,7 +3,7 @@ name = "mcp-deribit"
version = "0.1.0" version = "0.1.0"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [
"option-mcp-common", "mcp-common",
"fastapi>=0.115", "fastapi>=0.115",
"uvicorn[standard]>=0.30", "uvicorn[standard]>=0.30",
"httpx>=0.27", "httpx>=0.27",
@@ -21,7 +21,7 @@ build-backend = "hatchling.build"
packages = ["src/mcp_deribit"] packages = ["src/mcp_deribit"]
[tool.uv.sources] [tool.uv.sources]
option-mcp-common = { workspace = true } mcp-common = { workspace = true }
[project.scripts] [project.scripts]
mcp-deribit = "mcp_deribit.__main__:main" mcp-deribit = "mcp_deribit.__main__:main"
@@ -4,13 +4,13 @@ import json
import os import os
import uvicorn import uvicorn
from option_mcp_common.auth import load_token_store_from_files from mcp_common.auth import load_token_store_from_files
from option_mcp_common.env_validation import ( from mcp_common.env_validation import (
fail_fast_if_missing, fail_fast_if_missing,
require_env, require_env,
summarize, summarize,
) )
from option_mcp_common.logging import configure_root_logging from mcp_common.logging import configure_root_logging
from mcp_deribit.client import DeribitClient from mcp_deribit.client import DeribitClient
from mcp_deribit.server import create_app from mcp_deribit.server import create_app
@@ -5,7 +5,7 @@ from dataclasses import dataclass, field
from typing import Any from typing import Any
import httpx import httpx
from option_mcp_common import indicators as ind from mcp_common import indicators as ind
BASE_LIVE = "https://www.deribit.com/api/v2" BASE_LIVE = "https://www.deribit.com/api/v2"
BASE_TESTNET = "https://test.deribit.com/api/v2" BASE_TESTNET = "https://test.deribit.com/api/v2"
@@ -761,7 +761,7 @@ class DeribitClient:
} }
closes = [c["close"] for c in candles] closes = [c["close"] for c in candles]
from option_mcp_common import indicators as _ind from mcp_common import indicators as _ind
rsi_thr_low = (entry_rules or {}).get("rsi_below", 35) rsi_thr_low = (entry_rules or {}).get("rsi_below", 35)
rsi_thr_high = (entry_rules or {}).get("rsi_above", 65) rsi_thr_high = (entry_rules or {}).get("rsi_above", 65)
@@ -3,14 +3,14 @@ from __future__ import annotations
import os import os
from fastapi import Depends, FastAPI, HTTPException from fastapi import Depends, FastAPI, HTTPException
from option_mcp_common.auth import Principal, TokenStore, require_principal from mcp_common.auth import Principal, TokenStore, require_principal
from option_mcp_common.mcp_bridge import mount_mcp_endpoint from mcp_common.mcp_bridge import mount_mcp_endpoint
from option_mcp_common.risk_guard import ( from mcp_common.risk_guard import (
enforce_aggregate, enforce_aggregate,
enforce_leverage, enforce_leverage,
enforce_single_notional, enforce_single_notional,
) )
from option_mcp_common.server import build_app from mcp_common.server import build_app
from pydantic import BaseModel, field_validator, model_validator from pydantic import BaseModel, field_validator, model_validator
from mcp_deribit.client import DeribitClient from mcp_deribit.client import DeribitClient
@@ -5,7 +5,7 @@ from unittest.mock import AsyncMock, MagicMock
import pytest import pytest
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from mcp_deribit.server import create_app from mcp_deribit.server import create_app
from option_mcp_common.auth import Principal, TokenStore from mcp_common.auth import Principal, TokenStore
@pytest.fixture @pytest.fixture
+2 -2
View File
@@ -3,7 +3,7 @@ name = "mcp-hyperliquid"
version = "0.1.0" version = "0.1.0"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [
"option-mcp-common", "mcp-common",
"fastapi>=0.115", "fastapi>=0.115",
"uvicorn[standard]>=0.30", "uvicorn[standard]>=0.30",
"httpx>=0.27", "httpx>=0.27",
@@ -23,7 +23,7 @@ build-backend = "hatchling.build"
packages = ["src/mcp_hyperliquid"] packages = ["src/mcp_hyperliquid"]
[tool.uv.sources] [tool.uv.sources]
option-mcp-common = { workspace = true } mcp-common = { workspace = true }
[project.scripts] [project.scripts]
mcp-hyperliquid = "mcp_hyperliquid.__main__:main" mcp-hyperliquid = "mcp_hyperliquid.__main__:main"
@@ -4,9 +4,9 @@ import json
import os import os
import uvicorn import uvicorn
from option_mcp_common.auth import load_token_store_from_files from mcp_common.auth import load_token_store_from_files
from option_mcp_common.logging import configure_root_logging from mcp_common.logging import configure_root_logging
from mcp_hyperliquid.client import HyperliquidClient from mcp_hyperliquid.client import HyperliquidClient
from mcp_hyperliquid.server import create_app from mcp_hyperliquid.server import create_app
@@ -7,7 +7,7 @@ import datetime as _dt
from typing import Any from typing import Any
import httpx import httpx
from option_mcp_common import indicators as ind from mcp_common import indicators as ind
BASE_LIVE = "https://api.hyperliquid.xyz" BASE_LIVE = "https://api.hyperliquid.xyz"
BASE_TESTNET = "https://api.hyperliquid-testnet.xyz" BASE_TESTNET = "https://api.hyperliquid-testnet.xyz"
@@ -3,14 +3,14 @@ from __future__ import annotations
import os import os
from fastapi import Depends, FastAPI, HTTPException from fastapi import Depends, FastAPI, HTTPException
from option_mcp_common.auth import Principal, TokenStore, require_principal from mcp_common.auth import Principal, TokenStore, require_principal
from option_mcp_common.mcp_bridge import mount_mcp_endpoint from mcp_common.mcp_bridge import mount_mcp_endpoint
from option_mcp_common.risk_guard import ( from mcp_common.risk_guard import (
enforce_aggregate, enforce_aggregate,
enforce_leverage, enforce_leverage,
enforce_single_notional, enforce_single_notional,
) )
from option_mcp_common.server import build_app from mcp_common.server import build_app
from pydantic import BaseModel, field_validator, model_validator from pydantic import BaseModel, field_validator, model_validator
from mcp_hyperliquid.client import HyperliquidClient from mcp_hyperliquid.client import HyperliquidClient
@@ -5,7 +5,7 @@ from unittest.mock import AsyncMock, MagicMock
import pytest import pytest
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from mcp_hyperliquid.server import create_app from mcp_hyperliquid.server import create_app
from option_mcp_common.auth import Principal, TokenStore from mcp_common.auth import Principal, TokenStore
@pytest.fixture @pytest.fixture
+2 -2
View File
@@ -3,7 +3,7 @@ name = "mcp-macro"
version = "0.1.0" version = "0.1.0"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [
"option-mcp-common", "mcp-common",
"fastapi>=0.115", "fastapi>=0.115",
"uvicorn[standard]>=0.30", "uvicorn[standard]>=0.30",
"httpx>=0.27", "httpx>=0.27",
@@ -21,7 +21,7 @@ build-backend = "hatchling.build"
packages = ["src/mcp_macro"] packages = ["src/mcp_macro"]
[tool.uv.sources] [tool.uv.sources]
option-mcp-common = { workspace = true } mcp-common = { workspace = true }
[project.scripts] [project.scripts]
mcp-macro = "mcp_macro.__main__:main" mcp-macro = "mcp_macro.__main__:main"
+2 -2
View File
@@ -4,9 +4,9 @@ import json
import os import os
import uvicorn import uvicorn
from option_mcp_common.auth import load_token_store_from_files from mcp_common.auth import load_token_store_from_files
from option_mcp_common.logging import configure_root_logging from mcp_common.logging import configure_root_logging
from mcp_macro.server import create_app from mcp_macro.server import create_app
+3 -3
View File
@@ -3,9 +3,9 @@ from __future__ import annotations
import os import os
from fastapi import Depends, FastAPI, HTTPException from fastapi import Depends, FastAPI, HTTPException
from option_mcp_common.auth import Principal, TokenStore, require_principal from mcp_common.auth import Principal, TokenStore, require_principal
from option_mcp_common.mcp_bridge import mount_mcp_endpoint from mcp_common.mcp_bridge import mount_mcp_endpoint
from option_mcp_common.server import build_app from mcp_common.server import build_app
from pydantic import BaseModel from pydantic import BaseModel
from mcp_macro.fetchers import ( from mcp_macro.fetchers import (
+1 -1
View File
@@ -5,7 +5,7 @@ from unittest.mock import AsyncMock, patch
import pytest import pytest
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from mcp_macro.server import create_app from mcp_macro.server import create_app
from option_mcp_common.auth import Principal, TokenStore from mcp_common.auth import Principal, TokenStore
@pytest.fixture @pytest.fixture
+2 -2
View File
@@ -3,7 +3,7 @@ name = "mcp-sentiment"
version = "0.1.0" version = "0.1.0"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [
"option-mcp-common", "mcp-common",
"fastapi>=0.115", "fastapi>=0.115",
"uvicorn[standard]>=0.30", "uvicorn[standard]>=0.30",
"httpx>=0.27", "httpx>=0.27",
@@ -21,7 +21,7 @@ build-backend = "hatchling.build"
packages = ["src/mcp_sentiment"] packages = ["src/mcp_sentiment"]
[tool.uv.sources] [tool.uv.sources]
option-mcp-common = { workspace = true } mcp-common = { workspace = true }
[project.scripts] [project.scripts]
mcp-sentiment = "mcp_sentiment.__main__:main" mcp-sentiment = "mcp_sentiment.__main__:main"
@@ -4,9 +4,9 @@ import json
import os import os
import uvicorn import uvicorn
from option_mcp_common.auth import load_token_store_from_files from mcp_common.auth import load_token_store_from_files
from option_mcp_common.logging import configure_root_logging from mcp_common.logging import configure_root_logging
from mcp_sentiment.server import create_app from mcp_sentiment.server import create_app
@@ -4,9 +4,9 @@ import logging
import os import os
from fastapi import Depends, FastAPI, HTTPException from fastapi import Depends, FastAPI, HTTPException
from option_mcp_common.auth import Principal, TokenStore, require_principal from mcp_common.auth import Principal, TokenStore, require_principal
from option_mcp_common.mcp_bridge import mount_mcp_endpoint from mcp_common.mcp_bridge import mount_mcp_endpoint
from option_mcp_common.server import build_app from mcp_common.server import build_app
from pydantic import BaseModel from pydantic import BaseModel
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -5,7 +5,7 @@ from unittest.mock import AsyncMock, patch
import pytest import pytest
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from mcp_sentiment.server import create_app from mcp_sentiment.server import create_app
from option_mcp_common.auth import Principal, TokenStore from mcp_common.auth import Principal, TokenStore
@pytest.fixture @pytest.fixture
Generated
+2320
View File
File diff suppressed because it is too large Load Diff