Conversation
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
|
Are you on the latest tag? Can you do a git pull and retest filtering please? |
🧪 End-to-End Tag System Testing GuideThis guide provides comprehensive testing steps for the tag system implementation, covering both API endpoints and UI functionality. 🔧 Prerequisites1. Start MCP Gatewaymake serve2. Generate JWT Token# Generate token (expires in 7 days)
export JWT_TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token \
--username admin --exp 10080 --secret my-test-key)
# Verify token was created
echo $JWT_TOKEN
# Alternative: Generate token for testing
export JWT_TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token \
--username testuser --exp 0 --secret my-test-key)3. Verify Gateway is Runningcurl -I http://localhost:4444/
# Should return: HTTP/1.1 200 OK🚀 API Testing with cURLPhase 1: Basic Tag CRUD Operations1.1 Create Tools with Tags# Create tool with normalized tags
curl -X POST "http://localhost:4444/tools" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Database Query Tool",
"description": "Execute SQL queries on databases",
"input_schema": {"type": "object", "properties": {"query": {"type": "string"}}},
"tags": ["Machine Learning", "Database", "API Gateway"]
}'
# Create second tool with overlapping tags
curl -X POST "http://localhost:4444/tools" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "REST API Client",
"description": "Make HTTP requests to REST APIs",
"input_schema": {"type": "object", "properties": {"url": {"type": "string"}}},
"tags": ["api gateway", "web_development", "HTTP"]
}'
# Create third tool with different tags
curl -X POST "http://localhost:4444/tools" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "File Manager",
"description": "Manage files and directories",
"input_schema": {"type": "object", "properties": {"path": {"type": "string"}}},
"tags": ["file-system", "utilities", "admin"]
}'1.2 Create Resources with Tags# Create resource with tags
curl -X POST "http://localhost:4444/resources" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"uri": "resource://config/database",
"name": "Database Configuration",
"description": "Main database connection settings",
"content": "host=localhost\nport=5432\ndatabase=mcp_gateway",
"tags": ["config", "database", "production"]
}'
# Create second resource
curl -X POST "http://localhost:4444/resources" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"uri": "resource://docs/api",
"name": "API Documentation",
"description": "Complete API reference",
"content": "# API Reference\n\nThis is the complete API documentation...",
"tags": ["documentation", "api gateway", "reference"]
}'1.3 Create Prompts with Tags# Create prompt with tags
curl -X POST "http://localhost:4444/prompts" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "SQL Query Generator",
"description": "Generate SQL queries from natural language",
"template": "Generate a SQL query for the following request: {request}\nDatabase schema: {schema}",
"arguments": [
{"name": "request", "description": "Natural language description", "required": true},
{"name": "schema", "description": "Database schema", "required": false}
],
"tags": ["sql", "generation", "database", "machine learning"]
}'1.4 Create Server with Tags# Create server with tags
curl -X POST "http://localhost:4444/servers" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "ML Development Server",
"description": "Machine learning development environment",
"tags": ["machine learning", "development", "python", "jupyter"]
}'1.5 Create Gateway with Tags# Create gateway with tags
curl -X POST "http://localhost:4444/gateways" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Production Gateway",
"url": "https://prod-gateway.example.com",
"description": "Production environment gateway",
"tags": ["production", "external", "high-availability"]
}'Phase 2: Verify Tag Normalization2.1 Check Tag Normalization# Get the first tool and verify tags were normalized
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tools" | jq '.[0].tags'
# Expected output: ["machine-learning", "database", "api-gateway"]
# Original input was: ["Machine Learning", "Database", "API Gateway"]2.2 Test Various Tag Formats# Create tool with mixed tag formats to test normalization
curl -X POST "http://localhost:4444/tools" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Format Test Tool",
"description": "Testing tag format normalization",
"input_schema": {"type": "object"},
"tags": [" UPPERCASE ", "under_scores", "Multiple Spaces", "api:v2.0", "team:backend"]
}'
# Verify normalization
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tools" | jq '.[] | select(.name=="Format Test Tool") | .tags'
# Expected: ["uppercase", "under-scores", "multiple-spaces", "api:v2.0", "team:backend"]Phase 3: Test Tag Filtering3.1 Filter Tools by Single Tag# Find all tools with 'database' tag
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tools?tags=database" | jq '.[] | {name: .name, tags: .tags}'3.2 Filter Tools by Multiple Tags (OR logic)# Find tools with either 'api-gateway' OR 'database' tags
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tools?tags=api-gateway,database" | jq '.[] | {name: .name, tags: .tags}'3.3 Filter Other Entity Types# Filter resources by tag
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/resources?tags=config" | jq '.[] | {name: .name, tags: .tags}'
# Filter prompts by tag
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/prompts?tags=sql" | jq '.[] | {name: .name, tags: .tags}'
# Filter servers by tag
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/servers?tags=development" | jq '.[] | {name: .name, tags: .tags}'Phase 4: Test Tag Discovery API4.1 Get All Tags with Statistics# Get all tags across the system
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags" | jq '.'
# Expected: Array of TagInfo objects with name, stats (but empty entities array)4.2 Get Tags with Entity Details# Get all tags with full entity information
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags?include_entities=true" | jq '.'
# Expected: Same structure but entities array populated with TaggedEntity objects4.3 Filter Tags by Entity Type# Get tags only from tools
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags?entity_types=tools" | jq '.'
# Get tags from tools and resources only
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags?entity_types=tools,resources" | jq '.'
# Get tags from all entity types with entities
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags?entity_types=tools,resources,prompts,servers,gateways&include_entities=true" | jq '.'4.4 Get Entities by Specific Tag# Get all entities with 'database' tag
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags/database/entities" | jq '.'
# Get only tools with 'api-gateway' tag
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags/api-gateway/entities?entity_types=tools" | jq '.'
# Get tools and resources with 'machine-learning' tag
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags/machine-learning/entities?entity_types=tools,resources" | jq '.'4.5 Test Admin Tags Endpoint# Get flattened tag data for admin UI
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/admin/tags" | jq '.'
# Get admin tags with entity details
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/admin/tags?include_entities=true" | jq '.'Phase 5: Test Edge Cases5.1 Test Non-existent Tags# Try to get entities for non-existent tag
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags/nonexistent/entities" | jq '.'
# Expected: Empty array []5.2 Test Invalid Entity Types# Try invalid entity type
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags?entity_types=invalid" | jq '.'
# Expected: Empty array []5.3 Test Empty Tag Filtering# Filter by empty tag (should return empty results)
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tools?tags=" | jq '.'Phase 6: Test Tag Updates6.1 Update Tool Tags# Get tool ID first
TOOL_ID=$(curl -s -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tools" | jq -r '.[0].id')
# Update tool with new tags
curl -X PATCH "http://localhost:4444/tools/$TOOL_ID" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tags": ["updated-tag", "new feature", "v2.0"]
}'
# Verify update
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tools/$TOOL_ID" | jq '.tags'
# Expected: ["updated-tag", "new-feature", "v2.0"]Phase 7: Performance and Analytics Testing7.1 Generate Test Data# Create multiple entities with various tag combinations
for i in {1..10}; do
curl -X POST "http://localhost:4444/tools" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"Test Tool $i\",
\"description\": \"Bulk test tool $i\",
\"input_schema\": {\"type\": \"object\"},
\"tags\": [\"bulk-test\", \"tool-$i\", \"performance\"]
}" > /dev/null
done7.2 Test Tag Discovery Performance# Time the tag discovery endpoint
time curl -s -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags" > /dev/null
# Time with entity details (should be slower)
time curl -s -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags?include_entities=true" > /dev/null7.3 Test Popular Tags# Get tags sorted by usage (using jq)
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:4444/tags" | jq 'sort_by(-.stats.total) | .[0:5] | .[] | {name: .name, total: .stats.total}'🎨 UI Testing StepsPhase 1: Basic UI Verification1.1 Access Admin Interface
1.2 Verify Tag Display in Tables
1.3 Test Tag Filtering in Tables
Phase 2: Tag Management in Forms2.1 Create New Tool with Tags
2.2 Edit Existing Tool Tags
2.3 Test Tag Validation in Forms
Phase 3: Advanced Tag Features3.1 Test Tag Management Page
3.2 Test Entity Type Filtering on Tags Page
3.3 Test Tag Statistics
Phase 4: Cross-Browser and Responsive Testing4.1 Browser Compatibility
4.2 Mobile/Responsive Testing
Phase 5: User Experience Testing5.1 Test Natural Tag Input
5.2 Test Tag Discovery Workflow
Phase 6: Error Handling and Edge Cases6.1 Test Empty States
6.2 Test Large Numbers of Tags
6.3 Test Special Characters and Unicode
🔍 Verification ChecklistAPI Functionality ✅
UI Functionality ✅
Data Integrity ✅
User Experience ✅
🚨 Common Issues and TroubleshootingAPI Issues# If JWT token expires
export JWT_TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token --username admin --exp 10080 --secret my-test-key)
# If server not responding
curl -I http://localhost:4444/
# Should return HTTP 200, if not check server is running
# If getting 401 errors
echo $JWT_TOKEN # Verify token exists
# Check Authorization header format: "Bearer $JWT_TOKEN"UI Issues
Data Issues
|
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
|
@crivetimihai , @kevalmahajan ... Here are my observations: PR Test summary: make serve - pass UI Testing: Virtual Servers Catalogue:
Global Tools:
Global Resources:
Global Prompts:
Gateways/MCP Serves:
Roots:
|
Signed-off-by: Keval Mahajan <mahajankeval23@gmail.com>
* Initial tagging implementation Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Adding tags to ui, not yet recorded to db Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Adding UI tags support Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Tags docs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix flake8 Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix pylint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update docs and filters Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add tags in UI to gateways Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add tags in UI to gateways Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix filtering Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add /tags Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add /tags endpoint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add doctest test coverage Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix gateway add tags Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix lint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fixed server catalog panel to support tags Signed-off-by: Keval Mahajan <mahajankeval23@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Signed-off-by: Keval Mahajan <mahajankeval23@gmail.com> Co-authored-by: Keval Mahajan <mahajankeval23@gmail.com>
* Initial tagging implementation Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Adding tags to ui, not yet recorded to db Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Adding UI tags support Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Tags docs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix flake8 Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix pylint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update docs and filters Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add tags in UI to gateways Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add tags in UI to gateways Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix filtering Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add /tags Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add /tags endpoint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add doctest test coverage Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix gateway add tags Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix lint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fixed server catalog panel to support tags Signed-off-by: Keval Mahajan <mahajankeval23@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Signed-off-by: Keval Mahajan <mahajankeval23@gmail.com> Co-authored-by: Keval Mahajan <mahajankeval23@gmail.com>
* Initial tagging implementation Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Adding tags to ui, not yet recorded to db Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Adding UI tags support Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Tags docs Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix flake8 Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix pylint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Update docs and filters Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add tags in UI to gateways Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add tags in UI to gateways Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix filtering Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add /tags Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add /tags endpoint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Add doctest test coverage Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix gateway add tags Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fix lint Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> * Fixed server catalog panel to support tags Signed-off-by: Keval Mahajan <mahajankeval23@gmail.com> --------- Signed-off-by: Mihai Criveti <crivetimihai@gmail.com> Signed-off-by: Keval Mahajan <mahajankeval23@gmail.com> Co-authored-by: Keval Mahajan <mahajankeval23@gmail.com>


🏷️ [Feature] Comprehensive Tag Support System - closes #586
📋 Overview
This PR implements a complete tag support system for MCP Gateway, enabling flexible categorization and filtering across all entity types (tools, resources, prompts, servers, gateways). The implementation includes intelligent tag normalization, comprehensive validation, full UI integration, tag discovery APIs, and extensive documentation.
🎯 Issue Reference
Closes: #586 - [Feature Request]: Tag support with editing and validation across all APIs endpoints and UI (tags)
Epic Goal: Enable flexible tagging capabilities across all MCP Gateway entities to support dynamic categorization, filtering, and organization for advanced features like dynamic server composition.
Related: #319 #673 #313 #123
✨ Key Features Implemented
🔧 Core Tag System
🛠️ API Implementation
?tags=tag1,tag2with OR logic for all GET endpoints🔍 Tag Discovery API (NEW)
/tagsendpoint to retrieve all tags with statistics and optional entity details/tags/{tag_name}/entitiesendpoint to find all entities with a specific tag/admin/tagsendpoint for comprehensive tag management💻 Admin UI Integration
/admin/tagsinterface for system-wide tag overview📚 Enhanced Documentation
/docs/overview/tags.mdwith examples and best practices🚀 Enhanced Tag Normalization
The system goes beyond basic requirements with intelligent normalization:
📊 Implementation Details
Database Changes
Tag Validation Rules
New Tag Discovery Endpoints
GET /tags- List all unique tags across entity typesentity_typesfiltering (tools, resources, prompts, servers, gateways)include_entities=trueto return entity details for each tagGET /tags/{tag_name}/entities- Get entities by specific tagentity_typesfilteringTaggedEntityobjects with id, name, type, descriptionGET /admin/tags- Admin UI optimized tag endpoint/tagsbut with flattened response structureEnhanced Tag Service
TagServiceclass inmcpgateway/services/tag_service.pySchema Enhancements
TaggedEntity- Simplified entity representation for tag contextsTagStats- Statistics per entity type (tools, resources, prompts, servers, gateways, total)TagInfo- Complete tag information with stats and optional entities listAPI Examples
🎨 UI Features
Visual Integration
Enhanced Admin UI Tag Support
Tag Display and Input
Tag Management in Forms
Enhanced Filtering and Navigation
Admin Tags Management Page
/admin/tagsendpoint provides comprehensive tag overviewinclude_entities=true)User Experience
📚 Documentation Enhancements
Complete Tag System Guide
Added comprehensive documentation at
docs/docs/overview/tags.mdcovering:/tagsand/tags/{tag_name}/entitiesendpointsIntegration Examples
Python Client
TypeScript Client
🧪 Quality Assurance
Test Coverage
TagServicemethodsCode Quality
Security Testing
@,#,$, etc.)📈 Performance
Database Optimization
func.json_containsinclude_entitiesparameterClient-Side Performance
🔄 Migration Strategy
[]for existing entities📋 User Stories - Implementation Status
✅ Fully Implemented
User Story 1: ✅ Tag assignment and CRUD operations
User Story 2: ✅ Tag filtering for API consumers
User Story 3: ✅ Server and gateway tagging
✅ PATCH /servers/{id} with tags ✅ GET /servers?tags=production filteringUser Story 6: ✅ Tag validation and normalization
NEW: Tag Discovery & Analytics: ✅ Tag aggregation and entity lookup
✅ GET /tags - List all tags with usage statistics ✅ GET /tags/{tag}/entities - Find entities by specific tag ✅ Entity type filtering and optional entity details ✅ Admin UI tag management interface📋 Future Enhancements (Not in Scope)
/tools/tags) -> we cannot use /tools/tags as that overlaps a potential tool name./tools/bulk-tag)These features are documented for future implementation and don't block the core functionality.
🔍 Files Changed
Core Implementation (25+ files, +2,500 lines)
mcpgateway/db.py: Added tags columns to all entity modelsmcpgateway/schemas.py: Pydantic schemas with tag validation + new TaggedEntity, TagStats, TagInfomcpgateway/validation/tags.py: Complete tag validation system (262 lines)mcpgateway/services/*.py: Tag filtering in all service layersmcpgateway/services/tag_service.py: NEW - Tag discovery and aggregation servicemcpgateway/main.py: API endpoints with tag query parameters + new/tagsendpointsmcpgateway/admin.py: Enhanced with comprehensive tag support + new/admin/tagsendpointDatabase
mcpgateway/alembic/versions/cc7b95fec5d9_*.py: Migration for tags columnsFrontend
mcpgateway/templates/admin.html: Tag display, inputs, filtering UI (427+ lines)mcpgateway/static/admin.js: Tag editing and view integration (100+ lines)Documentation & Testing
docs/docs/overview/tags.md: Comprehensive user guide (739 lines)docs/docs/overview/.pages: Added tags.md to navigationtests/unit/mcpgateway/validation/test_tags.py: Full test suite (153 lines)tests/unit/mcpgateway/services/test_tag_service.py: NEW - Tag service teststests/integration/test_tag_endpoints.py: NEW - Integration tests for tag discoveryConfiguration
CLAUDE.md: Updated with testing commands and instructions🎉 Benefits
For Users
For Developers
For Operations
🚨 Breaking Changes
None. This is a purely additive feature with full backward compatibility.
🔧 Testing Instructions
API Testing
UI Testing
/admin/tagsto see system-wide tag overviewNormalization Testing
🚧 Missing Features & Future Roadmap
📋 Core API Enhancements
Enhanced Tag Discovery
/tools/tags,/resources/tags, etc. with entity-specific statisticsBulk Operations API
/admin/tools/bulk-tag- Apply/remove tags to multiple tools at once/admin/resources/bulk-tag- Bulk tag operations for resources/admin/prompts/bulk-tag- Bulk tag operations for prompts/admin/servers/bulk-tag- Bulk tag operations for servers🔍 Advanced Filtering & Search
Complex Query Support
?tags=api+database(requires both tags)?tags=api,-deprecated(has api, not deprecated)?tags=env:*(all environment tags)?tags=/^team:.*/(regex-based matching)Entity Cross-References
🔌 Plugin System Integration
Tag-Based Plugin Filtering ⭐ HIGH PRIORITY
Plugin Discovery by Tags
🎨 Admin UI Enhancements
Advanced Tag Management
Enhanced Filtering UI
🤖 Automation & Integration
Dynamic Server Composition ⭐ HIGH PRIORITY
Tag-Based Workflows
⭐ Implementation Priority Ranking
Phase 1 - Essential)
PluginConditionenhancements)Phase 2 - High Value
/tools/tags,/resources/tags)Phase 3 - Enhancement)
This roadmap transforms the basic tag system into a comprehensive entity organization and automation platform.
✅ Checklist
/tagsand/tags/{tag}/entitiesendpoints/admin/tagsmanagement interface🏆 Summary
This PR delivers a production-ready, comprehensive tag system that: