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 CHANGED
@@ -8,4 +8,4 @@ Fênix Cloud MCP Server (Python edition).
8
8
  __all__ = ["__version__"]
9
9
 
10
10
 
11
- __version__ = "1.10.0"
11
+ __version__ = "1.11.1"
@@ -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, description="Markdown content (required for create)."
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
- params = self._build_params(optional={"returnContent": return_content})
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fenix-mcp
3
- Version: 1.10.0
3
+ Version: 1.11.1
4
4
  Summary: Fênix Cloud MCP server implemented in Python
5
5
  Author: Fenix Inc
6
6
  Requires-Python: >=3.10
@@ -1,14 +1,14 @@
1
- fenix_mcp/__init__.py,sha256=3PxTTWdV2eIo9b1Kbb5YH180Z0_H6btnEjdqz98JwlQ,181
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=YJk7aSVGjXEvAkXrOHOuUjCFhYni9NPKFyPKiZqkrCc,4235
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=fXfjBwAQmZCn3Zc8BqFnQFAJkpd9JsfOPa_uXJj-bMU,15778
10
- fenix_mcp/application/tools/knowledge.py,sha256=XWi5qac0cXkmnll2Adi3pbiY60I4s-RA3UI5Nowu4ak,61009
11
- fenix_mcp/application/tools/productivity.py,sha256=wyJ7-2VqgI2cdrliBD_ejwNvQhN1DecpXSQVrCxcUpQ,11231
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=YIoDIUQdNd7zzt2X3OsgajjxH5Jqb_85A6BvQDN6H6o,28693
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.10.0.dist-info/METADATA,sha256=1GZaLx3YrJbSaeeVJ9SzvF4Zdh1fkc67AnpA2SqiLhk,7261
26
- fenix_mcp-1.10.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- fenix_mcp-1.10.0.dist-info/entry_points.txt,sha256=o52x_YHBupEd-1Z1GSfUjv3gJrx5_I-EkHhCgt1WBaE,49
28
- fenix_mcp-1.10.0.dist-info/top_level.txt,sha256=2G1UtKpwjaIGQyE7sRoHecxaGLeuexfjrOUjv9DDKh4,10
29
- fenix_mcp-1.10.0.dist-info/RECORD,,
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,,