=== NEW SERVERS ADDED (7) === - servers/closebot — 119 tools, 14 modules, 4,656 lines TS (Stage 7) - servers/google-console — Google Search Console MCP (Stage 7) - servers/meta-ads — Meta/Facebook Ads MCP (Stage 8) - servers/twilio — Twilio communications MCP (Stage 8) - servers/competitor-research — Competitive intel MCP (Stage 6) - servers/n8n-apps — n8n workflow MCP apps (Stage 6) - servers/reonomy — Commercial real estate MCP (Stage 1) === FACTORY INFRASTRUCTURE ADDED === - infra/factory-tools — mcp-jest, mcp-validator, mcp-add, MCP Inspector - 60 test configs, 702 auto-generated test cases - All 30 servers score 100/100 protocol compliance - infra/command-center — Pipeline state, operator playbook, dashboard config - infra/factory-reviews — Automated eval reports === DOCS ADDED === - docs/MCP-FACTORY.md — Factory overview - docs/reports/ — 5 pipeline evaluation reports - docs/research/ — Browser MCP research === RULES ESTABLISHED === - CONTRIBUTING.md — All MCP work MUST go in this repo - README.md — Full inventory of 37 servers + infra docs - .gitignore — Updated for Python venvs TOTAL: 37 MCP servers + full factory pipeline in one repo. This is now the single source of truth for all MCP work.
70 lines
1.6 KiB
JavaScript
70 lines
1.6 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Google Search Console MCP Server
|
|
* Entry point - initializes auth, client, and server
|
|
*/
|
|
|
|
import { getAuthClient } from './auth/index.js';
|
|
import { GSCClient } from './lib/gsc-client.js';
|
|
import { Cache } from './lib/cache.js';
|
|
import { RateLimiter } from './lib/rate-limit.js';
|
|
import { GSCServer } from './server.js';
|
|
|
|
async function main() {
|
|
try {
|
|
console.error('Starting Google Search Console MCP server...');
|
|
|
|
// Initialize authentication
|
|
console.error('Authenticating...');
|
|
const authClient = await getAuthClient();
|
|
|
|
// Initialize GSC client
|
|
const gscClient = new GSCClient(authClient as any);
|
|
|
|
// Initialize cache
|
|
const cacheTTL = process.env.GSC_CACHE_TTL
|
|
? parseInt(process.env.GSC_CACHE_TTL) * 1000
|
|
: undefined;
|
|
|
|
const cache = new Cache({
|
|
analyticsTTL: cacheTTL
|
|
});
|
|
|
|
// Initialize rate limiter
|
|
const rateLimiter = new RateLimiter();
|
|
|
|
// Start periodic cache pruning
|
|
setInterval(() => {
|
|
cache.prune();
|
|
}, 5 * 60 * 1000); // Every 5 minutes
|
|
|
|
// Create and connect server
|
|
const server = new GSCServer({
|
|
gscClient,
|
|
cache,
|
|
rateLimiter
|
|
});
|
|
|
|
await server.connect();
|
|
|
|
// Handle graceful shutdown
|
|
process.on('SIGINT', () => {
|
|
console.error('Shutting down gracefully...');
|
|
process.exit(0);
|
|
});
|
|
|
|
process.on('SIGTERM', () => {
|
|
console.error('Shutting down gracefully...');
|
|
process.exit(0);
|
|
});
|
|
|
|
} catch (error: any) {
|
|
console.error('Fatal error:', error.message);
|
|
console.error(error.stack);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|