waasup
Production-ready SaaS Model Context Protocol (MCP) server for PHP
Install / Use
claude mcp add SEOLinkMap -- npx -y github:SEOLinkMap/waasupIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
Development & EngineeringSupported Platforms
Tags
Our assessment of waasup
waasup scores 80/100 on our quality scale, 3607th of 4,588 Development & Engineering skills we index.
Its MCP Server is 16 KB long, well organised into 47 sections with 21 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 6 days ago, so waasup is actively maintained.
- Our last check on 2026-09-16 found the source still online.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 87/100, with 2 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
waasup compared with similar skills
All 4 of these similar skills score higher than waasup; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| waasup (this skill)by SEOLinkMap | 80 | 3 | 6d ago | MCP Server |
| taste-skillby Leonxlnx | 100 | 102.1k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 101.9k | today | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 77.7k | today | CLAUDE.md |
| ai-job-searchby ai-job-search-dev | 100 | 65.0k | 4d ago | CLAUDE.md |
Frequently asked questions
- How do I install waasup?
- Run
claude mcp add SEOLinkMap -- npx -y github:SEOLinkMap/waasup. The install tabs above show the steps for each supported agent. - Which AI agents does waasup work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is waasup safe to use?
- It is MIT-licensed and scores 87/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is waasup still maintained?
- The repository was last updated 6 days ago, so waasup is actively maintained.
Skill content
View source on GitHubWaaSuP with your website
WaaSuP (Website as a Server using PHP) - A production-ready, SaaS-oriented Model Context Protocol (MCP) server implementation for PHP. Built with enterprise-grade features including OAuth 2.1 authentication, real-time Server-Sent Events (SSE), and comprehensive tool management.
🚀 Try It Live
Want to see WaaSuP in action? Connect to our live demo MCP server with your favorite LLM or agentic tool!
💬 Chat With This Repository
Get instant help with:
- ✅ Installation guidance - Step-by-step setup for your environment
- ⚙️ Configuration assistance - Database setup, OAuth, framework integration
- 🛠️ Custom tool development - Build tools specific to your use case
- 🐛 Troubleshooting - Debug issues with access to the full codebase
- 📚 Code exploration - Understand how features work under the hood
The MCP server has access to our entire repository, documentation, and examples. Ask it anything!
📡 Live MCP Server
https://seolinkmap.com/mcp-repo
This public MCP endpoint showcases the server's capabilities with a complete Website-as-a-Server implementation (authless).
🔗 Need Help Connecting?
New to MCP servers? Learn how to connect: How to Connect to MCP Servers
Once connected, you can explore our entire repository through chat and get real-time help with WaaSuP installation and configuration.
Built by SEOLinkMap - This is our production "web server for chat and agentics" powering AI access to our entire SEO intelligence platform.
✨ Features
- 🔐 OAuth 2.1 Authentication - Complete OAuth flow with mandatory S256 PKCE, CSRF-protected consent, refresh token rotation with reuse detection, and RFC 8707 Resource Indicators
- ⚡ Multi-Transport Support - Server-Sent Events (SSE) and Streamable HTTP for real-time message delivery
- 🛠️ Flexible Tool System - Easy tool registration with both class-based and callable approaches
- 🏢 Multi-tenant Architecture - Agency/user context isolation for SaaS applications
- 📊 Production Ready - Comprehensive logging, error handling, and session management
- 🔌 Framework Agnostic - PSR-compliant with Slim Framework and Laravel integration included
- 💾 Database & Memory Storage - Multiple storage backends for different deployment scenarios
- 🌐 CORS Support - Full cross-origin resource sharing configuration
- 🎵 Audio Content Support - Handle audio content in tools and prompts (MCP 2025-03-26+)
- 📝 Structured User Input - Elicitation support for collecting structured data (MCP 2025-06-18)
- 🔄 Progress Notifications - Real-time progress updates with version-aware messaging
- 🏷️ Tool Annotations - Rich tool metadata for better LLM understanding (MCP 2025-03-26+)
- 📦 JSON-RPC Batching - Efficient batch request processing (MCP 2025-03-26)
- 📄 Pagination - Cursor-paged
tools/list,prompts/list,resources/listandresources/templates/list - 🔁 Stream Resumption - SSE event ids with
Last-Event-IDreplay after a dropped connection - 🔔 Subscriptions & Logging -
resources/subscribeandlogging/setLevelwith server-side delivery gating - 🖼️ Icons & Titles - Display metadata on tools, prompts, resources and templates (MCP 2025-11-25 / 2025-06-18)
- ⏳ Tasks - Task-augmented tool calls with
tasks/get,tasks/result,tasks/cancelandtasks/list(MCP 2025-11-25, experimental)
Requirements
- PHP 8.1 or higher
- Composer
- Database (MySQL/PostgreSQL recommended for production)
MCP Protocol Compliance
WaaSuP implements the complete MCP specification across multiple protocol versions with automatic feature gating:
Feature Matrix Summary
| Feature | 2024-11-05 | 2025-03-26 | 2025-06-18 | 2025-11-25 | |---------|------------|------------|------------|------------| | Tools | ✅ | ✅ | ✅ | ✅ | | Prompts | ✅ | ✅ | ✅ | ✅ | | Resources | ✅ | ✅ | ✅ | ✅ | | Resource Subscriptions | ✅ | ✅ | ✅ | ✅ | | Logging | ✅ | ✅ | ✅ | ✅ | | Sampling | ✅ | ✅ | ✅ | ✅ | | Roots | ✅ | ✅ | ✅ | ✅ | | Ping | ✅ | ✅ | ✅ | ✅ | | Progress Notifications | ✅ | ✅ | ✅ | ✅ | | Tool Annotations | ❌ | ✅ | ✅ | ✅ | | Audio Content | ❌ | ✅ | ✅ | ✅ | | Completions | ❌ | ✅ | ✅ | ✅ | | JSON-RPC Batching | ❌ | ✅ | ❌ | ❌ | | OAuth 2.1 | ❌ | ❌ | ✅ | ✅ | | Elicitation | ❌ | ❌ | ✅ | ✅ | | Structured Outputs | ❌ | ❌ | ✅ | ✅ | | Resource Links | ❌ | ❌ | ✅ | ✅ | | Resource Indicators (RFC 8707) | ❌ | ❌ | ✅ | ✅ | | Icons | ❌ | ❌ | ❌ | ✅ | | URL Mode Elicitation | ❌ | ❌ | ❌ | ✅ | | Tool Calling in Sampling | ❌ | ❌ | ❌ | ✅ | | Tasks (experimental) | ❌ | ❌ | ❌ | ✅ |
2026-07-28 is served alongside these. It replaces the initialize handshake and sessions with per-request metadata, so it is selected per request rather than negotiated, and is not shown in the matrix above.
Installation
composer require seolinkmap/waasup
# For PSR-3 logging support
composer require monolog/monolog
# For Slim Framework integration
composer require slim/slim slim/psr7
Database Setup
- Import the database schema:
1. Open `examples/database/database-schema.sql`
2. Use either MySQL section OR PostgreSQL section (not both)
3. Customize table names/prefixes as needed
4. Create only the tables you need (if using your own table mapping)
- Create your first agency:
INSERT INTO mcp_agencies (uuid, name, active)
VALUES ('550e8400-e29b-41d4-a716-446655440000', 'My Company', 1);
- Create an OAuth token:
INSERT INTO mcp_oauth_tokens (
access_token, scope, expires_at, agency_id
) VALUES (
'your-secret-token-here',
'mcp:read mcp:write',
DATE_ADD(NOW(), INTERVAL 1 YEAR),
1
);
Quick Start
Basic Server Setup
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Slim\Factory\AppFactory;
use Slim\Psr7\Factory\{ResponseFactory, StreamFactory};
use Seolinkmap\Waasup\Storage\DatabaseStorage;
use Seolinkmap\Waasup\Tools\Registry\ToolRegistry;
use Seolinkmap\Waasup\Prompts\Registry\PromptRegistry;
use Seolinkmap\Waasup\Resources\Registry\ResourceRegistry;
use Seolinkmap\Waasup\Integration\Slim\SlimMCPProvider;
// Database connection
$pdo = new PDO('mysql:host=localhost;dbname=mcp_server', $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
// Initialize components
$storage = new DatabaseStorage($pdo, ['table_prefix' => 'mcp_']);
$toolRegistry = new ToolRegistry();
$promptRegistry = new PromptRegistry();
$resourceRegistry = new ResourceRegistry();
$responseFactory = new ResponseFactory();
$streamFactory = new StreamFactory();
// Configuration
$config = [
'server_info' => [
'name' => 'My MCP Server',
'version' => '0.0.7'
],
'auth' => [
'context_types' => ['agency'],
'base_url' => 'https://your-domain.com'
]
];
// Create MCP provider
$mcpProvider = new SlimMCPProvider(
$storage, $toolRegistry, $promptRegistry, $resourceRegistry,
$responseFactory, $streamFactory, $config
);
// Setup Slim app
$app = AppFactory::create();
$app->addErrorMiddleware(true, true, true);
// OAuth discovery endpoints
$app->get('/.well-known/oauth-authorization-server',
[$mcpProvider, 'handleAuthDiscovery']);
// Main MCP endpoint
$app->map(['GET', 'POST', 'OPTIONS'], '/mcp/{agencyUuid}[/{sessID}]',
[$mcpProvider, 'handleMCP'])
->add($mcpProvider->getAuthMiddleware());
$app->run();
Adding Tools
Simple Callable Tool
$toolRegistry->register('get_weather', function($params, $context) {
$location = $params['location'] ?? 'Unknown';
return [
'location' => $location,
'temperature' => '22°C',
'condition' => 'Sunny'
];
}, [
'description' => 'Get weather information for a location',
'inputSchema' => [
'type' => 'object',
'properties' => [
'location' => ['type' => 'string', 'description' => 'Location name']
],
'required' => ['location']
]
]);
Built-in Tools
use Seolinkmap\Waasup\Tools\Built\{PingTool, ServerInfoTool};
$toolRegistry->registerTool(new PingTool());
$toolRegistry->registerTool(new ServerInfoTool($config));
Adding Prompts and Resources
// Register a prompt
$promptRegistry->register('greeting', function($arguments, $context) {
$name = $arguments['name'] ?? 'there';
return [
'description' => 'A friendly greeting prompt',
'messages' => [[
'role' => 'user',
'content' => [['type' => 'text', 'text' => "Please greet {$name}."]]
]]
];
});
// Register a resource
$resourceRegistry->register('server://status', function($uri, $context) {
return [
'contents' => [[
'uri' => $uri,
'mimeType' => 'application/json',
'text' => json_encode(['status' => 'healthy', 'timestamp' => date('c')])
]]
];
});
Framework Integration
Laravel Integration
Add the service provider to your Laravel application:
// config/app.php
'providers' => [
Seolinkmap\Waasup\Integration\Laravel\LaravelServiceProvider::class,
],
Register routes and use the provided controller pattern. See the full Laravel integration example in the /examples directory.
Standalone (PSR-7)
use Seolinkmap\Waasup\MCPSaaSServer;
$server = new MCPSaaSServer($storage, $toolRegistry, $promptRegistry, $resourceRegistry, $config, $logger);
$response = $server->handle($request, $response);
Configuration
Server Configuration
$config = [
'supported_versions' => ['2025-11-25', '2025-06-18', '2025-03-26', '2024-11-05'],
'server_info' => [
'name' => 'Your MCP Server',
'version' => '0.0.7'
],
'auth' => [
'context_types' => ['agency', 'user'],
'validate_scope' => true,
'required_scopes' => ['mcp:read'],
'base_url' => 'https://your-domain.com'
],
'sse' => [
'keepalive_interval' => 1,
'max_connection_time' => 1800,
'switch_interval_after' => 60
]
];
Storage Options
Database Storage (Production)
$storage = new DatabaseStorage($pdo, [
'table_prefix' => 'mcp_',
'cleanup_interval' => 3600
]);
Memory Storage (Development/Testing)
$storage = new MemoryStorage();
// Add test data
$storage->addContext('550e8400-e29b-41d4-a716-446655440000', 'agency', [
'id' => 1, 'name' => 'Test Agency', 'active' => true
]);
OAuth 2.1 & Authentication
WaaSuP implements complete OAuth 2.1 with RFC 8707 Resource Indicators for MCP 2025-06-18:
- Authorization Code Flow with PKCE (required)
- Resource Indicators for token binding to specific MCP endpoints
- Social Authentication via Google, LinkedIn, and GitHub
- Token Validation with audience claims and scope checking
- Discovery Endpoints for client configuration
Social authentication can be configured for each provider:
$config['google'] = [
'client_id' => 'your-google-client-id',
'client_secret' => 'your-google-client-secret',
'redirect_uri' => 'https://your-domain.com/oauth/google/callback'
];
Advanced Features
Audio Content Handling (MCP 2025-03-26+)
use Seolinkmap\Waasup\Content\AudioContentHandler;
// In your tool
return [
'content' => [
['type' => 'text', 'text' => 'Here is the audio file:'],
Truncated for display — read the full file on GitHub.
Related Skills
taste-skill
102.1kAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
Agent-Reach
101.9kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
77.7kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ai-job-search
65.0kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
