fenix-mcp 1.10.0__py3-none-any.whl → 1.11.1__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.
- fenix_mcp/__init__.py +1 -1
- fenix_mcp/application/tool_base.py +24 -0
- fenix_mcp/application/tools/intelligence.py +2 -1
- fenix_mcp/application/tools/knowledge.py +3 -2
- fenix_mcp/application/tools/productivity.py +3 -1
- fenix_mcp/infrastructure/fenix_api/client.py +3 -31
- {fenix_mcp-1.10.0.dist-info → fenix_mcp-1.11.1.dist-info}/METADATA +1 -1
- {fenix_mcp-1.10.0.dist-info → fenix_mcp-1.11.1.dist-info}/RECORD +11 -11
- {fenix_mcp-1.10.0.dist-info → fenix_mcp-1.11.1.dist-info}/WHEEL +0 -0
- {fenix_mcp-1.10.0.dist-info → fenix_mcp-1.11.1.dist-info}/entry_points.txt +0 -0
- {fenix_mcp-1.10.0.dist-info → fenix_mcp-1.11.1.dist-info}/top_level.txt +0 -0
fenix_mcp/__init__.py
CHANGED
|
@@ -70,6 +70,30 @@ MarkdownStr = Annotated[
|
|
|
70
70
|
),
|
|
71
71
|
]
|
|
72
72
|
|
|
73
|
+
# Mermaid diagram hint for markdown fields
|
|
74
|
+
MERMAID_HINT = """
|
|
75
|
+
💡 **Tip**: You can use Mermaid code blocks to create visual diagrams.
|
|
76
|
+
|
|
77
|
+
Flowchart example:
|
|
78
|
+
```mermaid
|
|
79
|
+
graph TD
|
|
80
|
+
A[Start] --> B{Decision}
|
|
81
|
+
B -->|Yes| C[Action 1]
|
|
82
|
+
B -->|No| D[Action 2]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Sequence diagram example:
|
|
86
|
+
```mermaid
|
|
87
|
+
sequenceDiagram
|
|
88
|
+
participant U as User
|
|
89
|
+
participant A as API
|
|
90
|
+
U->>A: Request
|
|
91
|
+
A-->>U: Response
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Supported types: flowchart, sequenceDiagram, classDiagram, gantt, pie, mindmap, gitGraph.
|
|
95
|
+
"""
|
|
96
|
+
|
|
73
97
|
# Short title/name strings (1-300 chars)
|
|
74
98
|
TitleStr = Annotated[
|
|
75
99
|
str,
|
|
@@ -10,6 +10,7 @@ from pydantic import Field, field_validator
|
|
|
10
10
|
|
|
11
11
|
from fenix_mcp.application.presenters import text
|
|
12
12
|
from fenix_mcp.application.tool_base import (
|
|
13
|
+
MERMAID_HINT,
|
|
13
14
|
CategoryStr,
|
|
14
15
|
DateTimeStr,
|
|
15
16
|
MarkdownStr,
|
|
@@ -73,7 +74,7 @@ class IntelligenceRequest(ToolRequest):
|
|
|
73
74
|
action: IntelligenceAction = Field(description=ACTION_FIELD_DESCRIPTION)
|
|
74
75
|
title: Optional[TitleStr] = Field(default=None, description="Memory title.")
|
|
75
76
|
content: Optional[MarkdownStr] = Field(
|
|
76
|
-
default=None, description="Memory content/text (Markdown)."
|
|
77
|
+
default=None, description=f"Memory content/text (Markdown).{MERMAID_HINT}"
|
|
77
78
|
)
|
|
78
79
|
metadata: Optional[MarkdownStr] = Field(
|
|
79
80
|
default=None,
|
|
@@ -10,6 +10,7 @@ from pydantic import Field
|
|
|
10
10
|
|
|
11
11
|
from fenix_mcp.application.presenters import text
|
|
12
12
|
from fenix_mcp.application.tool_base import (
|
|
13
|
+
MERMAID_HINT,
|
|
13
14
|
CategoryStr,
|
|
14
15
|
DateTimeStr,
|
|
15
16
|
DescriptionStr,
|
|
@@ -226,7 +227,7 @@ class KnowledgeRequest(ToolRequest):
|
|
|
226
227
|
)
|
|
227
228
|
work_title: Optional[TitleStr] = Field(default=None, description="Work item title.")
|
|
228
229
|
work_description: Optional[MarkdownStr] = Field(
|
|
229
|
-
default=None, description="Work item description (Markdown)."
|
|
230
|
+
default=None, description=f"Work item description (Markdown).{MERMAID_HINT}"
|
|
230
231
|
)
|
|
231
232
|
work_type: Optional[str] = Field(
|
|
232
233
|
default="task",
|
|
@@ -324,7 +325,7 @@ class KnowledgeRequest(ToolRequest):
|
|
|
324
325
|
default=None, description="Documentation description."
|
|
325
326
|
)
|
|
326
327
|
doc_content: Optional[MarkdownStr] = Field(
|
|
327
|
-
default=None, description="Documentation content (Markdown)."
|
|
328
|
+
default=None, description=f"Documentation content (Markdown).{MERMAID_HINT}"
|
|
328
329
|
)
|
|
329
330
|
doc_status: Optional[str] = Field(
|
|
330
331
|
default=None,
|
|
@@ -10,6 +10,7 @@ from pydantic import Field
|
|
|
10
10
|
|
|
11
11
|
from fenix_mcp.application.presenters import text
|
|
12
12
|
from fenix_mcp.application.tool_base import (
|
|
13
|
+
MERMAID_HINT,
|
|
13
14
|
CategoryStr,
|
|
14
15
|
DateTimeStr,
|
|
15
16
|
MarkdownStr,
|
|
@@ -77,7 +78,8 @@ class ProductivityRequest(ToolRequest):
|
|
|
77
78
|
default=None, description="TODO title (required for create)."
|
|
78
79
|
)
|
|
79
80
|
content: Optional[MarkdownStr] = Field(
|
|
80
|
-
default=None,
|
|
81
|
+
default=None,
|
|
82
|
+
description=f"Markdown content (required for create).{MERMAID_HINT}",
|
|
81
83
|
)
|
|
82
84
|
status: Optional[str] = Field(
|
|
83
85
|
default=None,
|
|
@@ -33,7 +33,6 @@ class FenixApiClient:
|
|
|
33
33
|
|
|
34
34
|
base_url: str
|
|
35
35
|
personal_access_token: Optional[str]
|
|
36
|
-
core_documents_token: Optional[str] = None
|
|
37
36
|
timeout: float = 30.0
|
|
38
37
|
_http: HttpClient = field(init=False, repr=False)
|
|
39
38
|
|
|
@@ -71,11 +70,6 @@ class FenixApiClient:
|
|
|
71
70
|
headers.pop("Authorization", None)
|
|
72
71
|
self._http.default_headers = headers
|
|
73
72
|
|
|
74
|
-
def update_core_documents_token(self, token: Optional[str]) -> None:
|
|
75
|
-
"""Update the MCP token used to access public core document endpoints."""
|
|
76
|
-
|
|
77
|
-
self.core_documents_token = token
|
|
78
|
-
|
|
79
73
|
def _build_params(
|
|
80
74
|
self,
|
|
81
75
|
*,
|
|
@@ -137,38 +131,16 @@ class FenixApiClient:
|
|
|
137
131
|
return self._request("GET", "/api/auth/profile")
|
|
138
132
|
|
|
139
133
|
# ------------------------------------------------------------------
|
|
140
|
-
# Core documents
|
|
134
|
+
# Core documents (requires PAT authentication)
|
|
141
135
|
# ------------------------------------------------------------------
|
|
142
136
|
|
|
143
137
|
def list_core_documents(self, *, return_content: bool = False) -> Any:
|
|
144
|
-
|
|
145
|
-
headers = (
|
|
146
|
-
{"x-mcp-token": self.core_documents_token}
|
|
147
|
-
if self.core_documents_token
|
|
148
|
-
else None
|
|
149
|
-
)
|
|
150
|
-
return self._request(
|
|
151
|
-
"GET", "/api/core-documents/mcp/all", params=params, headers=headers
|
|
152
|
-
)
|
|
153
|
-
|
|
154
|
-
def get_core_document_by_name(
|
|
155
|
-
self, name: str, *, return_content: bool = False
|
|
156
|
-
) -> Any:
|
|
157
|
-
params = self._build_params(optional={"returnContent": return_content})
|
|
158
|
-
headers = (
|
|
159
|
-
{"x-mcp-token": self.core_documents_token}
|
|
160
|
-
if self.core_documents_token
|
|
161
|
-
else None
|
|
162
|
-
)
|
|
163
|
-
return self._request(
|
|
164
|
-
"GET", f"/api/core-documents/mcp/{name}", params=params, headers=headers
|
|
165
|
-
)
|
|
166
|
-
|
|
167
|
-
def list_core_documents_auth(self, *, return_content: bool = False) -> Any:
|
|
138
|
+
"""List all core documents. Requires valid PAT."""
|
|
168
139
|
params = self._build_params(optional={"returnContent": return_content})
|
|
169
140
|
return self._request("GET", "/api/core-documents", params=params)
|
|
170
141
|
|
|
171
142
|
def get_core_document(self, name: str, *, return_content: bool = False) -> Any:
|
|
143
|
+
"""Get a core document by name. Requires valid PAT."""
|
|
172
144
|
params = self._build_params(optional={"returnContent": return_content})
|
|
173
145
|
return self._request("GET", f"/api/core-documents/{name}", params=params)
|
|
174
146
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
fenix_mcp/__init__.py,sha256=
|
|
1
|
+
fenix_mcp/__init__.py,sha256=wxNxqqpM42ftMbpmNbeurEBsHypAnfgnwhv6pwyRJIw,181
|
|
2
2
|
fenix_mcp/main.py,sha256=iJV-9btNMDJMObvcn7wBQdbLLKjkYCQ1ANGEwHGHlMU,2857
|
|
3
3
|
fenix_mcp/application/presenters.py,sha256=fGME54PdCDhTBhXO-JUB9yLdBHiE1aeXLTC2fCuxnxM,689
|
|
4
|
-
fenix_mcp/application/tool_base.py,sha256=
|
|
4
|
+
fenix_mcp/application/tool_base.py,sha256=ZCb9g4ij5Hbb0410NEZTYXvPWq-Zkg8ZCsinTa3gCY4,4741
|
|
5
5
|
fenix_mcp/application/tool_registry.py,sha256=bPT5g8GfxG_qu28R1WaDOZHvtmG6TPDvZi8eWj1T9xE,1250
|
|
6
6
|
fenix_mcp/application/tools/__init__.py,sha256=Gi1YvYh-KdL9HD8gLVrknHrxiKKEOhHBEZ02KBXJaKQ,796
|
|
7
7
|
fenix_mcp/application/tools/health.py,sha256=m5DxhoRbdwl6INzd6PISxv1NAv-ljCrezsr773VB0wE,834
|
|
8
8
|
fenix_mcp/application/tools/initialize.py,sha256=YfsE3fVYiqGEwvaI_jg5-0K7pGURXxpB3WNwETmGBPc,5499
|
|
9
|
-
fenix_mcp/application/tools/intelligence.py,sha256=
|
|
10
|
-
fenix_mcp/application/tools/knowledge.py,sha256=
|
|
11
|
-
fenix_mcp/application/tools/productivity.py,sha256=
|
|
9
|
+
fenix_mcp/application/tools/intelligence.py,sha256=wsph1GwiQX3aX5NtFIZlM7I5xo1N3KT-cMlVfZuaHpU,15811
|
|
10
|
+
fenix_mcp/application/tools/knowledge.py,sha256=AQBSispBde0-jAhlKjHrek9FNUaZzqhn293yyocYUQ0,61057
|
|
11
|
+
fenix_mcp/application/tools/productivity.py,sha256=Wmefwg6yuXkHwwQT999d9D4lQf0UY_jnCTDlBe2YRTg,11273
|
|
12
12
|
fenix_mcp/application/tools/user_config.py,sha256=O5AVg7IUKL9uIoUoBSFovBDHl9jofhKWzhFK7CnKi4s,6470
|
|
13
13
|
fenix_mcp/domain/initialization.py,sha256=AZhdSNITQ7O3clELBuqGvjJc-c8pFKc7zQz-XR2xXPc,6933
|
|
14
14
|
fenix_mcp/domain/intelligence.py,sha256=j1kkxT-pjuzLQeAGDd2H8gd3O1aeUIRgHFnMGvNwQYg,8636
|
|
@@ -19,11 +19,11 @@ fenix_mcp/infrastructure/config.py,sha256=zhJ3hhsP-bRfICcdq8rIDh5NGDe_u7AGpcgjcc
|
|
|
19
19
|
fenix_mcp/infrastructure/context.py,sha256=kiDiamiPbHZpTGyZMylcQwtLhfaDXrxAkWSst_DWQNw,470
|
|
20
20
|
fenix_mcp/infrastructure/http_client.py,sha256=QLIPhGYR_cBQGsbIO4RTR6ksyvkQt-OKHQU1JhPyap8,2470
|
|
21
21
|
fenix_mcp/infrastructure/logging.py,sha256=bHrWlSi_0HshRe3--BK_5nzUszW-gh37q6jsd0ShS2Y,1371
|
|
22
|
-
fenix_mcp/infrastructure/fenix_api/client.py,sha256=
|
|
22
|
+
fenix_mcp/infrastructure/fenix_api/client.py,sha256=Sv3hCIFuO0llbv7RDtyLweBNRh82HxZLxDpQVV4UvXg,27709
|
|
23
23
|
fenix_mcp/interface/mcp_server.py,sha256=5UM2NJuNbwHkmCEprIFataJ5nFZiO8efTtP_oW3_iX0,2331
|
|
24
24
|
fenix_mcp/interface/transports.py,sha256=PxdhfjH8UMl03f7nuCLc-M6tMx6-Y-btVz_mSqXKrSI,8138
|
|
25
|
-
fenix_mcp-1.
|
|
26
|
-
fenix_mcp-1.
|
|
27
|
-
fenix_mcp-1.
|
|
28
|
-
fenix_mcp-1.
|
|
29
|
-
fenix_mcp-1.
|
|
25
|
+
fenix_mcp-1.11.1.dist-info/METADATA,sha256=o_I6x0qfkw0u73O3ow5zkBzDqqf0Zfs-CUNtyUM3sRc,7261
|
|
26
|
+
fenix_mcp-1.11.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
27
|
+
fenix_mcp-1.11.1.dist-info/entry_points.txt,sha256=o52x_YHBupEd-1Z1GSfUjv3gJrx5_I-EkHhCgt1WBaE,49
|
|
28
|
+
fenix_mcp-1.11.1.dist-info/top_level.txt,sha256=2G1UtKpwjaIGQyE7sRoHecxaGLeuexfjrOUjv9DDKh4,10
|
|
29
|
+
fenix_mcp-1.11.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|