We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/2389-research/mcp-socialmedia'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
name: MCP-Probe Integration Tests
on:
push:
branches: [ main, missing-tests ]
pull_request:
branches: [ main ]
schedule:
# Run daily at 2 AM UTC
- cron: '0 2 * * *'
jobs:
mcp-probe-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install Rust (for mcp-probe)
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
- name: Install mcp-probe
run: cargo install mcp-cli
- name: Install Node.js dependencies
run: npm ci
- name: Build project
run: npm run build
- name: Run MCP Protocol Compliance Tests
env:
SOCIALMEDIA_API_BASE_URL: "https://api.example.com"
SOCIALMEDIA_API_KEY: "test-key-for-ci"
SOCIALMEDIA_TEAM_ID: "ci-test-team"
LOG_LEVEL: "error"
CI: "true"
run: |
mkdir -p reports/mcp-probe
# Try mcp-probe first, fallback to simple test
if timeout 60s mcp-probe validate \
--stdio "node" \
--args "dist/index.js" \
--working-dir "$PWD" \
--report "reports/mcp-probe/compliance-report.json" \
--severity "warning"; then
echo "✅ mcp-probe validation completed"
else
echo "⚠️ mcp-probe timed out, running fallback test"
node scripts/ci-mcp-test.js
fi
- name: Run Automated MCP Tests
env:
SOCIALMEDIA_API_BASE_URL: "https://api.example.com"
SOCIALMEDIA_API_KEY: "test-key-for-ci"
SOCIALMEDIA_TEAM_ID: "ci-test-team"
LOG_LEVEL: "error"
CI: "true"
run: |
mcp-probe test \
--stdio "node" \
--args "dist/index.js" \
--working-dir "$PWD" \
--report \
--output-dir "reports/mcp-probe" || true
- name: HTTP Transport Test
env:
SOCIALMEDIA_API_BASE_URL: "https://api.example.com"
SOCIALMEDIA_API_KEY: "test-key-for-ci"
SOCIALMEDIA_TEAM_ID: "ci-test-team"
LOG_LEVEL: "error"
CI: "true"
MCP_TRANSPORT: "http"
MCP_HTTP_PORT: "3000"
run: |
# Start server in background
npm run start:http &
HTTP_PID=$!
# Wait for server to start
sleep 5
# Test HTTP+SSE endpoint
mcp-probe validate \
--http-sse "http://localhost:3000/mcp" \
--report "reports/mcp-probe/http-sse-report.json" \
--severity "warning" || true
# Clean up
kill $HTTP_PID 2>/dev/null || true
- name: Upload MCP-Probe Reports
uses: actions/upload-artifact@v4
if: always()
with:
name: mcp-probe-reports
path: reports/mcp-probe/
- name: Comment MCP-Probe Results on PR
if: github.event_name == 'pull_request'
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
try {
const complianceReport = JSON.parse(fs.readFileSync('reports/mcp-probe/compliance-report.json', 'utf8'));
const summary = complianceReport.summary;
const body = `## 🔍 MCP-Probe Test Results
**Protocol Compliance: ${summary.compliance_percentage.toFixed(1)}%**
📊 **Test Summary:**
- ✅ Passed: ${summary.passed}
- ⚠️ Warnings: ${summary.warnings}
- ❌ Errors: ${summary.errors}
- 🔴 Critical: ${summary.critical}
- **Total Tests:** ${summary.total_tests}
**Performance:**
- Initialization: ${complianceReport.performance.initialization_time.nanos / 1000000}ms
- Average Request: ${complianceReport.performance.average_request_time.nanos / 1000000}ms
- Total Requests: ${complianceReport.performance.total_requests}
- Failed Requests: ${complianceReport.performance.failed_requests}
**Tools Discovered:** ${complianceReport.results.find(r => r.test_id === 'tools_listing')?.details?.tools?.length || 0}
**Resources Discovered:** ${complianceReport.results.find(r => r.test_id === 'resources_listing')?.details?.resources?.length || 0}
**Prompts Discovered:** ${complianceReport.results.find(r => r.test_id === 'prompts_listing')?.details?.prompts?.length || 0}
📁 Detailed reports available in the [workflow artifacts](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}).`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: body
});
} catch (error) {
console.log('Could not create comment:', error.message);
}