We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/klauseduard/vibe-coded-jira-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
#!/usr/bin/env python3
"""
Test JIRA MCP server with actual operations
"""
import asyncio
import sys
import json
from mcp.client.stdio import stdio_client, StdioServerParameters
from mcp.client.session import ClientSession
async def test_jira_operations():
"""Test JIRA operations through MCP"""
import os
server_params = StdioServerParameters(
command=sys.executable,
args=["simple_jira.py", "--transport", "stdio"],
env=os.environ.copy() # Pass current environment to subprocess
)
try:
async with stdio_client(server_params) as streams:
read, write = streams
async with ClientSession(read, write) as session:
await session.initialize()
print("β
MCP Server initialized\n")
# Test 1: Get projects
print("π Testing get_projects_tool...")
try:
result = await session.call_tool(
"get_projects_tool",
arguments={"max_results": 5}
)
print(f" Raw result: {result}")
if result.content and result.content[0].text:
projects = json.loads(result.content[0].text)
else:
projects = {"error": "Empty response from server"}
if "error" in projects:
print(f"β Error getting projects: {projects['error']}")
elif "projects" in projects:
print(f"β
Found {len(projects['projects'])} projects:")
for proj in projects['projects'][:3]: # Show first 3
print(f" - {proj.get('key', 'N/A')}: {proj.get('name', 'N/A')}")
else:
print(f"β οΈ Unexpected response: {projects}")
except Exception as e:
print(f"β Failed to get projects: {e}")
print()
# Test 2: Search for recent issues
print("π Testing search_issues_tool...")
try:
result = await session.call_tool(
"search_issues_tool",
arguments={
"jql": "created >= -7d ORDER BY created DESC",
"max_results": 3
}
)
issues = json.loads(result.content[0].text) if result.content else {}
if "error" in issues:
print(f"β Error searching issues: {issues['error']}")
elif "issues" in issues:
print(f"β
Found {issues.get('total', 0)} total issues, showing {len(issues['issues'])}:")
for issue in issues['issues']:
print(f" - {issue.get('key', 'N/A')}: {issue.get('fields', {}).get('summary', 'N/A')}")
else:
print(f"β οΈ Unexpected response: {issues}")
except Exception as e:
print(f"β Failed to search issues: {e}")
print()
# Test 3: Get a specific issue (hardcoded for testing)
print("π Testing get_issue_tool...")
# Skip interactive input for now
issue_key = None # You can hardcode an issue key here if you know one
if issue_key:
try:
result = await session.call_tool(
"get_issue_tool",
arguments={"issue_key": issue_key}
)
issue = json.loads(result.content[0].text) if result.content else {}
if "error" in issue:
print(f"β Error getting issue: {issue['error']}")
elif "key" in issue:
print(f"β
Retrieved issue {issue['key']}:")
fields = issue.get('fields', {})
print(f" Summary: {fields.get('summary', 'N/A')}")
print(f" Status: {fields.get('status', {}).get('name', 'N/A')}")
print(f" Assignee: {fields.get('assignee', {}).get('displayName', 'Unassigned')}")
else:
print(f"β οΈ Unexpected response: {issue}")
except Exception as e:
print(f"β Failed to get issue: {e}")
else:
print(" Skipped")
return True
except Exception as e:
print(f"β Error connecting to server: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
print("π Testing JIRA MCP Server Operations\n")
print("=" * 50)
success = asyncio.run(test_jira_operations())
print("=" * 50)
print("\nβ
All tests completed!" if success else "\nβ Tests failed!")
sys.exit(0 if success else 1)