minitap-mcp 0.7.0__tar.gz → 0.8.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.
Files changed (34) hide show
  1. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/PKG-INFO +1 -1
  2. minitap_mcp-0.8.1/minitap/mcp/core/config.py +85 -0
  3. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/pyproject.toml +1 -1
  4. minitap_mcp-0.7.0/minitap/mcp/core/config.py +0 -36
  5. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/PYPI_README.md +0 -0
  6. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/__init__.py +0 -0
  7. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/agents/compare_screenshots/agent.py +0 -0
  8. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/agents/compare_screenshots/eval/prompts/prompt_1.md +0 -0
  9. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/agents/compare_screenshots/eval/scenario_1_add_cartoon_img_and_move_button/actual.png +0 -0
  10. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/agents/compare_screenshots/eval/scenario_1_add_cartoon_img_and_move_button/figma.png +0 -0
  11. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/agents/compare_screenshots/eval/scenario_1_add_cartoon_img_and_move_button/human_feedback.txt +0 -0
  12. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/agents/compare_screenshots/eval/scenario_1_add_cartoon_img_and_move_button/prompt_1/model_params.json +0 -0
  13. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/agents/compare_screenshots/eval/scenario_1_add_cartoon_img_and_move_button/prompt_1/output.md +0 -0
  14. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/agents/compare_screenshots/prompt.md +0 -0
  15. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/cloud_apk.py +0 -0
  16. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/decorators.py +0 -0
  17. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/device.py +0 -0
  18. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/llm.py +0 -0
  19. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/logging_config.py +0 -0
  20. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/models.py +0 -0
  21. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/sdk_agent.py +0 -0
  22. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/storage.py +0 -0
  23. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/utils/figma.py +0 -0
  24. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/core/utils/images.py +0 -0
  25. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/main.py +0 -0
  26. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/server/cloud_mobile.py +0 -0
  27. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/server/middleware.py +0 -0
  28. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/server/poller.py +0 -0
  29. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/server/remote_proxy.py +0 -0
  30. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/tools/execute_mobile_command.py +0 -0
  31. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/tools/read_swift_logs.py +0 -0
  32. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/tools/screen_analyzer.md +0 -0
  33. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/tools/take_screenshot.py +0 -0
  34. {minitap_mcp-0.7.0 → minitap_mcp-0.8.1}/minitap/mcp/tools/upload_screenshot.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: minitap-mcp
3
- Version: 0.7.0
3
+ Version: 0.8.1
4
4
  Summary: Model Context Protocol server for controlling Android & iOS devices with natural language
5
5
  Author: Pierre-Louis Favreau, Jean-Pierre Lo, Clément Guiguet
6
6
  Requires-Dist: fastmcp>=2.12.4
@@ -0,0 +1,85 @@
1
+ """Configuration for the MCP server."""
2
+
3
+ from urllib.parse import urlparse
4
+
5
+ from dotenv import load_dotenv
6
+ from pydantic import Field, SecretStr, model_validator
7
+ from pydantic_settings import BaseSettings, SettingsConfigDict
8
+
9
+ # Load environment variables from .env file
10
+ load_dotenv(verbose=True)
11
+
12
+
13
+ def _derive_mcp_url_from_base(base_url: str) -> str:
14
+ """Derive the MCP URL from the API base URL.
15
+
16
+ Extracts the scheme and host from the base URL and appends /api/mcp.
17
+ Example: https://dev.platform.minitap.ai/api/v1 -> https://dev.platform.minitap.ai/api/mcp/
18
+ """
19
+ parsed = urlparse(base_url)
20
+ return f"{parsed.scheme}://{parsed.netloc}/api/mcp/"
21
+
22
+
23
+ def _derive_daas_url_from_base(base_url: str) -> str:
24
+ """Derive the DaaS API URL from the API base URL.
25
+
26
+ Extracts the scheme and host from the base URL and appends /api/daas.
27
+ Example: https://dev.platform.minitap.ai/api/v1 -> https://dev.platform.minitap.ai/api/daas/
28
+ """
29
+ parsed = urlparse(base_url)
30
+ return f"{parsed.scheme}://{parsed.netloc}/api/daas/"
31
+
32
+
33
+ class MCPSettings(BaseSettings):
34
+ """Configuration class for MCP server."""
35
+
36
+ model_config = SettingsConfigDict(env_file=".env", extra="ignore")
37
+
38
+ # Minitap API configuration
39
+ MINITAP_API_KEY: SecretStr | None = Field(default=None)
40
+ MINITAP_API_BASE_URL: str = Field(default="https://platform.minitap.ai/api/v1")
41
+
42
+ # These URLs can be set explicitly, or will be derived from MINITAP_API_BASE_URL
43
+ MINITAP_DAAS_API: str | None = Field(default=None)
44
+ MINITAP_API_MCP_BASE_URL: str | None = Field(default=None)
45
+
46
+ OPEN_ROUTER_API_KEY: SecretStr | None = Field(default=None)
47
+
48
+ VISION_MODEL: str = Field(default="google/gemini-3-flash-preview")
49
+
50
+ # MCP server configuration (optional, for remote access)
51
+ MCP_SERVER_HOST: str = Field(default="0.0.0.0")
52
+ MCP_SERVER_PORT: int = Field(default=8000)
53
+
54
+ # Cloud Mobile configuration
55
+ # When set, the MCP server runs in cloud mode connecting to a Minitap cloud mobile
56
+ # instead of requiring a local device. Value can be a device name.
57
+ # Create cloud mobiles at https://platform.minitap.ai/cloud-mobiles
58
+ CLOUD_MOBILE_NAME: str | None = Field(default=None)
59
+
60
+ @model_validator(mode="after")
61
+ def derive_urls_from_base(self) -> "MCPSettings":
62
+ """Derive MCP and DaaS URLs from base URL if not explicitly set.
63
+
64
+ This ensures that setting MINITAP_API_BASE_URL to a different environment
65
+ (e.g., dev) automatically updates all related URLs.
66
+ """
67
+ if self.MINITAP_API_MCP_BASE_URL is None:
68
+ # Use object.__setattr__ to bypass Pydantic's frozen model protection
69
+ object.__setattr__(
70
+ self,
71
+ "MINITAP_API_MCP_BASE_URL",
72
+ _derive_mcp_url_from_base(self.MINITAP_API_BASE_URL),
73
+ )
74
+
75
+ if self.MINITAP_DAAS_API is None:
76
+ object.__setattr__(
77
+ self,
78
+ "MINITAP_DAAS_API",
79
+ _derive_daas_url_from_base(self.MINITAP_API_BASE_URL),
80
+ )
81
+
82
+ return self
83
+
84
+
85
+ settings = MCPSettings() # type: ignore
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "minitap-mcp"
3
- version = "0.7.0"
3
+ version = "0.8.1"
4
4
  description = "Model Context Protocol server for controlling Android & iOS devices with natural language"
5
5
  readme = "PYPI_README.md"
6
6
 
@@ -1,36 +0,0 @@
1
- """Configuration for the MCP server."""
2
-
3
- from dotenv import load_dotenv
4
- from pydantic import Field, SecretStr
5
- from pydantic_settings import BaseSettings, SettingsConfigDict
6
-
7
- # Load environment variables from .env file
8
- load_dotenv(verbose=True)
9
-
10
-
11
- class MCPSettings(BaseSettings):
12
- """Configuration class for MCP server."""
13
-
14
- model_config = SettingsConfigDict(env_file=".env", extra="ignore")
15
-
16
- # Minitap API configuration
17
- MINITAP_API_KEY: SecretStr | None = Field(default=None)
18
- MINITAP_API_BASE_URL: str = Field(default="https://platform.minitap.ai/api/v1")
19
- MINITAP_DAAS_API: str = Field(default="https://platform.minitap.ai/api/daas")
20
- MINITAP_API_MCP_BASE_URL: str | None = Field(default="https://platform.minitap.ai/mcp")
21
- OPEN_ROUTER_API_KEY: SecretStr | None = Field(default=None)
22
-
23
- VISION_MODEL: str = Field(default="google/gemini-3-flash-preview")
24
-
25
- # MCP server configuration (optional, for remote access)
26
- MCP_SERVER_HOST: str = Field(default="0.0.0.0")
27
- MCP_SERVER_PORT: int = Field(default=8000)
28
-
29
- # Cloud Mobile configuration
30
- # When set, the MCP server runs in cloud mode connecting to a Minitap cloud mobile
31
- # instead of requiring a local device. Value can be a device name.
32
- # Create cloud mobiles at https://platform.minitap.ai/cloud-mobiles
33
- CLOUD_MOBILE_NAME: str | None = Field(default=None)
34
-
35
-
36
- settings = MCPSettings() # type: ignore
File without changes