nia-mcp-server 1.0.13__tar.gz → 1.0.14__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.
Potentially problematic release.
This version of nia-mcp-server might be problematic. Click here for more details.
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/PKG-INFO +1 -1
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/pyproject.toml +1 -1
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/api_client.py +2 -2
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/nia_rules.md +1 -1
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/server.py +28 -28
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/.gitignore +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/ARCHITECTURE.md +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/LICENSE +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/README.md +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/nia_analytics.log +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/nia_mcp_server.log +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/__init__.py +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/__main__.py +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/claude_rules.md +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/cursor_rules.md +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/vscode_rules.md +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/windsurf_rules.md +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/cli.py +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/profiles.py +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/project_init.py +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/rule_transformer.py +0 -0
- {nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/setup.py +0 -0
|
@@ -75,7 +75,7 @@ class NIAApiClient:
|
|
|
75
75
|
"lifetime limit",
|
|
76
76
|
"no chat credits",
|
|
77
77
|
"free api requests",
|
|
78
|
-
"
|
|
78
|
+
"3 free",
|
|
79
79
|
"usage limit",
|
|
80
80
|
]
|
|
81
81
|
):
|
|
@@ -99,7 +99,7 @@ class NIAApiClient:
|
|
|
99
99
|
for phrase in [
|
|
100
100
|
"lifetime limit",
|
|
101
101
|
"free api requests",
|
|
102
|
-
"
|
|
102
|
+
"3 free",
|
|
103
103
|
"usage limit",
|
|
104
104
|
]
|
|
105
105
|
):
|
{nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/nia_rules.md
RENAMED
|
@@ -36,7 +36,7 @@ Note: Nia is just "Nia" - not an acronym. It's the name of the knowledge search
|
|
|
36
36
|
- **Leverage repository context** - Specify repositories when searching indexed codebases
|
|
37
37
|
|
|
38
38
|
### 4. API Usage Best Practices
|
|
39
|
-
- **Handle rate limits gracefully** - Free tier has
|
|
39
|
+
- **Handle rate limits gracefully** - Free tier has 3 indexing operations limit
|
|
40
40
|
- **Cache results mentally** - Avoid redundant searches in the same conversation
|
|
41
41
|
- **Batch operations** - Index multiple related repositories together
|
|
42
42
|
- **Monitor status efficiently** - Check status periodically, not continuously
|
|
@@ -121,11 +121,11 @@ async def index_repository(
|
|
|
121
121
|
|
|
122
122
|
except APIError as e:
|
|
123
123
|
logger.error(f"API Error indexing repository: {e} (status_code={e.status_code}, detail={e.detail})")
|
|
124
|
-
if e.status_code == 403 or "free tier limit" in str(e).lower() or "
|
|
125
|
-
if e.detail and "
|
|
124
|
+
if e.status_code == 403 or "free tier limit" in str(e).lower() or "indexing operations" in str(e).lower():
|
|
125
|
+
if e.detail and "3 free indexing operations" in e.detail:
|
|
126
126
|
return [TextContent(
|
|
127
127
|
type="text",
|
|
128
|
-
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited
|
|
128
|
+
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited indexing."
|
|
129
129
|
)]
|
|
130
130
|
else:
|
|
131
131
|
return [TextContent(
|
|
@@ -137,10 +137,10 @@ async def index_repository(
|
|
|
137
137
|
except Exception as e:
|
|
138
138
|
logger.error(f"Unexpected error indexing repository: {e}")
|
|
139
139
|
error_msg = str(e)
|
|
140
|
-
if "
|
|
140
|
+
if "indexing operations" in error_msg.lower() or "lifetime limit" in error_msg.lower():
|
|
141
141
|
return [TextContent(
|
|
142
142
|
type="text",
|
|
143
|
-
text=f"❌ {error_msg}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited
|
|
143
|
+
text=f"❌ {error_msg}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited indexing."
|
|
144
144
|
)]
|
|
145
145
|
return [TextContent(
|
|
146
146
|
type="text",
|
|
@@ -279,11 +279,11 @@ async def search_codebase(
|
|
|
279
279
|
|
|
280
280
|
except APIError as e:
|
|
281
281
|
logger.error(f"API Error searching codebase: {e} (status_code={e.status_code}, detail={e.detail})")
|
|
282
|
-
if e.status_code == 403 or "free tier limit" in str(e).lower() or "
|
|
283
|
-
if e.detail and "
|
|
282
|
+
if e.status_code == 403 or "free tier limit" in str(e).lower() or "indexing operations" in str(e).lower():
|
|
283
|
+
if e.detail and "3 free indexing operations" in e.detail:
|
|
284
284
|
return [TextContent(
|
|
285
285
|
type="text",
|
|
286
|
-
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited
|
|
286
|
+
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited indexing."
|
|
287
287
|
)]
|
|
288
288
|
else:
|
|
289
289
|
return [TextContent(
|
|
@@ -295,10 +295,10 @@ async def search_codebase(
|
|
|
295
295
|
except Exception as e:
|
|
296
296
|
logger.error(f"Unexpected error searching codebase: {e}")
|
|
297
297
|
error_msg = str(e)
|
|
298
|
-
if "
|
|
298
|
+
if "indexing operations" in error_msg.lower() or "lifetime limit" in error_msg.lower():
|
|
299
299
|
return [TextContent(
|
|
300
300
|
type="text",
|
|
301
|
-
text=f"❌ {error_msg}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited
|
|
301
|
+
text=f"❌ {error_msg}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited indexing."
|
|
302
302
|
)]
|
|
303
303
|
return [TextContent(
|
|
304
304
|
type="text",
|
|
@@ -419,7 +419,7 @@ async def search_documentation(
|
|
|
419
419
|
logger.error(f"API Error searching documentation: {e}")
|
|
420
420
|
error_msg = f"❌ {str(e)}"
|
|
421
421
|
if e.status_code == 403 and "lifetime limit" in str(e).lower():
|
|
422
|
-
error_msg += "\n\n💡 Tip: You've reached the free tier limit of
|
|
422
|
+
error_msg += "\n\n💡 Tip: You've reached the free tier limit of 3 indexing operations. Upgrade to Pro for unlimited access."
|
|
423
423
|
return [TextContent(type="text", text=error_msg)]
|
|
424
424
|
except Exception as e:
|
|
425
425
|
logger.error(f"Error searching documentation: {e}")
|
|
@@ -476,12 +476,12 @@ async def list_repositories() -> List[TextContent]:
|
|
|
476
476
|
except APIError as e:
|
|
477
477
|
logger.error(f"API Error listing repositories: {e} (status_code={e.status_code}, detail={e.detail})")
|
|
478
478
|
# Check for free tier limit errors
|
|
479
|
-
if e.status_code == 403 or "free tier limit" in str(e).lower() or "
|
|
479
|
+
if e.status_code == 403 or "free tier limit" in str(e).lower() or "indexing operations" in str(e).lower():
|
|
480
480
|
# Extract the specific limit message
|
|
481
|
-
if e.detail and "
|
|
481
|
+
if e.detail and "3 free indexing operations" in e.detail:
|
|
482
482
|
return [TextContent(
|
|
483
483
|
type="text",
|
|
484
|
-
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited
|
|
484
|
+
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited indexing."
|
|
485
485
|
)]
|
|
486
486
|
else:
|
|
487
487
|
return [TextContent(
|
|
@@ -494,10 +494,10 @@ async def list_repositories() -> List[TextContent]:
|
|
|
494
494
|
logger.error(f"Unexpected error listing repositories (type={type(e).__name__}): {e}")
|
|
495
495
|
# Check if this looks like an API limit error that wasn't caught properly
|
|
496
496
|
error_msg = str(e)
|
|
497
|
-
if "
|
|
497
|
+
if "indexing operations" in error_msg.lower() or "lifetime limit" in error_msg.lower():
|
|
498
498
|
return [TextContent(
|
|
499
499
|
type="text",
|
|
500
|
-
text=f"❌ {error_msg}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited
|
|
500
|
+
text=f"❌ {error_msg}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited indexing."
|
|
501
501
|
)]
|
|
502
502
|
return [TextContent(
|
|
503
503
|
type="text",
|
|
@@ -558,7 +558,7 @@ async def check_repository_status(repository: str) -> List[TextContent]:
|
|
|
558
558
|
logger.error(f"API Error checking repository status: {e}")
|
|
559
559
|
error_msg = f"❌ {str(e)}"
|
|
560
560
|
if e.status_code == 403 and "lifetime limit" in str(e).lower():
|
|
561
|
-
error_msg += "\n\n💡 Tip: You've reached the free tier limit of
|
|
561
|
+
error_msg += "\n\n💡 Tip: You've reached the free tier limit of 3 indexing operations. Upgrade to Pro for unlimited access."
|
|
562
562
|
return [TextContent(type="text", text=error_msg)]
|
|
563
563
|
except Exception as e:
|
|
564
564
|
logger.error(f"Error checking repository status: {e}")
|
|
@@ -645,7 +645,7 @@ async def index_documentation(
|
|
|
645
645
|
logger.error(f"API Error indexing documentation: {e}")
|
|
646
646
|
error_msg = f"❌ {str(e)}"
|
|
647
647
|
if e.status_code == 403 and "lifetime limit" in str(e).lower():
|
|
648
|
-
error_msg += "\n\n💡 Tip: You've reached the free tier limit of
|
|
648
|
+
error_msg += "\n\n💡 Tip: You've reached the free tier limit of 3 indexing operations. Upgrade to Pro for unlimited access."
|
|
649
649
|
return [TextContent(type="text", text=error_msg)]
|
|
650
650
|
except Exception as e:
|
|
651
651
|
logger.error(f"Error indexing documentation: {e}")
|
|
@@ -704,7 +704,7 @@ async def list_documentation() -> List[TextContent]:
|
|
|
704
704
|
logger.error(f"API Error listing documentation: {e}")
|
|
705
705
|
error_msg = f"❌ {str(e)}"
|
|
706
706
|
if e.status_code == 403 and "lifetime limit" in str(e).lower():
|
|
707
|
-
error_msg += "\n\n💡 Tip: You've reached the free tier limit of
|
|
707
|
+
error_msg += "\n\n💡 Tip: You've reached the free tier limit of 3 indexing operations. Upgrade to Pro for unlimited access."
|
|
708
708
|
return [TextContent(type="text", text=error_msg)]
|
|
709
709
|
except Exception as e:
|
|
710
710
|
logger.error(f"Error listing documentation: {e}")
|
|
@@ -770,7 +770,7 @@ async def check_documentation_status(source_id: str) -> List[TextContent]:
|
|
|
770
770
|
logger.error(f"API Error checking documentation status: {e}")
|
|
771
771
|
error_msg = f"❌ {str(e)}"
|
|
772
772
|
if e.status_code == 403 and "lifetime limit" in str(e).lower():
|
|
773
|
-
error_msg += "\n\n💡 Tip: You've reached the free tier limit of
|
|
773
|
+
error_msg += "\n\n💡 Tip: You've reached the free tier limit of 3 indexing operations. Upgrade to Pro for unlimited access."
|
|
774
774
|
return [TextContent(type="text", text=error_msg)]
|
|
775
775
|
except Exception as e:
|
|
776
776
|
logger.error(f"Error checking documentation status: {e}")
|
|
@@ -809,7 +809,7 @@ async def delete_documentation(source_id: str) -> List[TextContent]:
|
|
|
809
809
|
logger.error(f"API Error deleting documentation: {e}")
|
|
810
810
|
error_msg = f"❌ {str(e)}"
|
|
811
811
|
if e.status_code == 403 and "lifetime limit" in str(e).lower():
|
|
812
|
-
error_msg += "\n\n💡 Tip: You've reached the free tier limit of
|
|
812
|
+
error_msg += "\n\n💡 Tip: You've reached the free tier limit of 3 indexing operations. Upgrade to Pro for unlimited access."
|
|
813
813
|
return [TextContent(type="text", text=error_msg)]
|
|
814
814
|
except Exception as e:
|
|
815
815
|
logger.error(f"Error deleting documentation: {e}")
|
|
@@ -848,7 +848,7 @@ async def delete_repository(repository: str) -> List[TextContent]:
|
|
|
848
848
|
logger.error(f"API Error deleting repository: {e}")
|
|
849
849
|
error_msg = f"❌ {str(e)}"
|
|
850
850
|
if e.status_code == 403 and "lifetime limit" in str(e).lower():
|
|
851
|
-
error_msg += "\n\n💡 Tip: You've reached the free tier limit of
|
|
851
|
+
error_msg += "\n\n💡 Tip: You've reached the free tier limit of 3 indexing operations. Upgrade to Pro for unlimited access."
|
|
852
852
|
return [TextContent(type="text", text=error_msg)]
|
|
853
853
|
except Exception as e:
|
|
854
854
|
logger.error(f"Error deleting repository: {e}")
|
|
@@ -1099,11 +1099,11 @@ async def nia_web_search(
|
|
|
1099
1099
|
|
|
1100
1100
|
except APIError as e:
|
|
1101
1101
|
logger.error(f"API Error in web search: {e}")
|
|
1102
|
-
if e.status_code == 403 or "free tier limit" in str(e).lower() or "
|
|
1103
|
-
if e.detail and "
|
|
1102
|
+
if e.status_code == 403 or "free tier limit" in str(e).lower() or "indexing operations" in str(e).lower():
|
|
1103
|
+
if e.detail and "3 free indexing operations" in e.detail:
|
|
1104
1104
|
return [TextContent(
|
|
1105
1105
|
type="text",
|
|
1106
|
-
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited
|
|
1106
|
+
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited indexing."
|
|
1107
1107
|
)]
|
|
1108
1108
|
else:
|
|
1109
1109
|
return [TextContent(
|
|
@@ -1278,11 +1278,11 @@ async def nia_deep_research_agent(
|
|
|
1278
1278
|
|
|
1279
1279
|
except APIError as e:
|
|
1280
1280
|
logger.error(f"API Error in deep research: {e}")
|
|
1281
|
-
if e.status_code == 403 or "free tier limit" in str(e).lower() or "
|
|
1282
|
-
if e.detail and "
|
|
1281
|
+
if e.status_code == 403 or "free tier limit" in str(e).lower() or "indexing operations" in str(e).lower():
|
|
1282
|
+
if e.detail and "3 free indexing operations" in e.detail:
|
|
1283
1283
|
return [TextContent(
|
|
1284
1284
|
type="text",
|
|
1285
|
-
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited
|
|
1285
|
+
text=f"❌ {e.detail}\n\n💡 Tip: Upgrade to Pro at https://trynia.ai/billing for unlimited indexing."
|
|
1286
1286
|
)]
|
|
1287
1287
|
else:
|
|
1288
1288
|
return [TextContent(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/claude_rules.md
RENAMED
|
File without changes
|
{nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/cursor_rules.md
RENAMED
|
File without changes
|
{nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/vscode_rules.md
RENAMED
|
File without changes
|
{nia_mcp_server-1.0.13 → nia_mcp_server-1.0.14}/src/nia_mcp_server/assets/rules/windsurf_rules.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|