nia-mcp-server 1.0.13__py3-none-any.whl → 1.0.14__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.

Potentially problematic release.


This version of nia-mcp-server might be problematic. Click here for more details.

@@ -75,7 +75,7 @@ class NIAApiClient:
75
75
  "lifetime limit",
76
76
  "no chat credits",
77
77
  "free api requests",
78
- "5 free",
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
- "5 free",
102
+ "3 free",
103
103
  "usage limit",
104
104
  ]
105
105
  ):
@@ -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 25 API request limit
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
nia_mcp_server/server.py CHANGED
@@ -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 "free api requests" in str(e).lower():
125
- if e.detail and "5 free API requests" in e.detail:
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 API access."
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 "free api requests" in error_msg.lower() or "lifetime limit" in error_msg.lower():
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 API access."
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 "free api requests" in str(e).lower():
283
- if e.detail and "5 free API requests" in e.detail:
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 API access."
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 "free api requests" in error_msg.lower() or "lifetime limit" in error_msg.lower():
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 API access."
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 5 API requests. Upgrade to Pro for unlimited access."
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 "free api requests" in str(e).lower():
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 "5 free API requests" in e.detail:
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 API access."
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 "free api requests" in error_msg.lower() or "lifetime limit" in error_msg.lower():
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 API access."
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 5 API requests. Upgrade to Pro for unlimited access."
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 5 API requests. Upgrade to Pro for unlimited access."
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 5 API requests. Upgrade to Pro for unlimited access."
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 5 API requests. Upgrade to Pro for unlimited access."
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 5 API requests. Upgrade to Pro for unlimited access."
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 5 API requests. Upgrade to Pro for unlimited access."
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 "free api requests" in str(e).lower():
1103
- if e.detail and "5 free API requests" in e.detail:
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 API access."
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 "free api requests" in str(e).lower():
1282
- if e.detail and "5 free API requests" in e.detail:
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 API access."
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(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nia-mcp-server
3
- Version: 1.0.13
3
+ Version: 1.0.14
4
4
  Summary: Nia Knowledge Agent
5
5
  Project-URL: Homepage, https://trynia.ai
6
6
  Project-URL: Documentation, https://docs.trynia.ai
@@ -1,19 +1,19 @@
1
1
  nia_mcp_server/__init__.py,sha256=meeT4feLJfGvMAng90TkSl96ykJI_siO0HtnR-5RR5w,85
2
2
  nia_mcp_server/__main__.py,sha256=YQSpFtDeKp18r8mKr084cHnRFV4416_EKCu9FTM8_ik,394
3
- nia_mcp_server/api_client.py,sha256=6QFUg6jI9m0EAMrGm-HEAU5uYsUUxzhRau0iLCW9fpU,25815
3
+ nia_mcp_server/api_client.py,sha256=-wSOyL1I9MVCQR2cE1NRXyqB3ZjtnNn8d6sLRhFoSyA,25815
4
4
  nia_mcp_server/cli.py,sha256=32VSPNIocXtDgVBDZNZsxvj3kytBn54_a1pIE84vOdY,1834
5
5
  nia_mcp_server/profiles.py,sha256=2DD8PFRr5Ij4IK4sPUz0mH8aKjkrEtkKLC1R0iki2bA,7221
6
6
  nia_mcp_server/project_init.py,sha256=T0-ziJhofL4L8APwnM43BLhxtlmOHaYH-V9PF2yXLw4,7138
7
7
  nia_mcp_server/rule_transformer.py,sha256=wCxoQ1Kl_rI9mUFnh9kG5iCXYU4QInrmFQOReZfAFVo,11000
8
- nia_mcp_server/server.py,sha256=CuXj-YWd4QHhhE5v_hEGHWGalO3whVlFUOMK359vqgs,75827
8
+ nia_mcp_server/server.py,sha256=ZZ46Q_mf3BlqpQ4_sZPUSH18PcEDmhE0c_mgocr7Mmk,75911
9
9
  nia_mcp_server/setup.py,sha256=nJXVY8NHGtWROtoH8DW-3uOgyuPs4F9dW0cNhcbCLrM,5355
10
10
  nia_mcp_server/assets/rules/claude_rules.md,sha256=HNL5GJMUbFxSpNbIAJUQWqAywjMl4lf530I1in69aNY,7380
11
11
  nia_mcp_server/assets/rules/cursor_rules.md,sha256=hd6lhzNrK1ULQUYIEVeOnyKnuLKq4hmwZPbMqGUI1Lk,1720
12
- nia_mcp_server/assets/rules/nia_rules.md,sha256=mvdYrkoiRgxeROhtnRXCV53TX5B9wqLiCJ6oYTqSPfY,6345
12
+ nia_mcp_server/assets/rules/nia_rules.md,sha256=9j47OkNivwFwARxiCUF6o2RIVaPqFzInYw8tnhKYwE0,6352
13
13
  nia_mcp_server/assets/rules/vscode_rules.md,sha256=fqn4aJO_bhftaCGkVoquruQHf3EaREQJQWHXq6a4FOk,6967
14
14
  nia_mcp_server/assets/rules/windsurf_rules.md,sha256=PzU2as5gaiVsV6PAzg8T_-GR7VCyRQGMjAHcSzYF_ms,3354
15
- nia_mcp_server-1.0.13.dist-info/METADATA,sha256=uUDkIiPkBZLCuZk8uqUUo0aCIF-dw8iZKuXGqHqQwe4,1324
16
- nia_mcp_server-1.0.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
- nia_mcp_server-1.0.13.dist-info/entry_points.txt,sha256=V74FQEp48pfWxPCl7B9mihtqvIJNVjCSbRfCz4ww77I,64
18
- nia_mcp_server-1.0.13.dist-info/licenses/LICENSE,sha256=IrdVKi3bsiB2MTLM26MltBRpwyNi-8P6Cy0EnmAN76A,1557
19
- nia_mcp_server-1.0.13.dist-info/RECORD,,
15
+ nia_mcp_server-1.0.14.dist-info/METADATA,sha256=Y6PwQIZ2NMFQb8JHFH-Oor9HyGcO0SruF-ypy58GSZ8,1324
16
+ nia_mcp_server-1.0.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
+ nia_mcp_server-1.0.14.dist-info/entry_points.txt,sha256=V74FQEp48pfWxPCl7B9mihtqvIJNVjCSbRfCz4ww77I,64
18
+ nia_mcp_server-1.0.14.dist-info/licenses/LICENSE,sha256=IrdVKi3bsiB2MTLM26MltBRpwyNi-8P6Cy0EnmAN76A,1557
19
+ nia_mcp_server-1.0.14.dist-info/RECORD,,