
Apology-as-a-Service (AaaS)
"Because sometimes, 'my bad' just isn't enough."
π’ Live endpoints:
-
Streamable HTTP (current MCP):
https://apology-as-a-service-production.up.railway.app/mcp -
SSE (legacy, kept for older clients):
https://apology-as-a-service-production.up.railway.app/sse -
Quick HTTP demo:
https://apology-as-a-service-production.up.railway.app/demo
A Model Context Protocol (MCP) server that provides highly sophisticated, context-aware apologies for AI agents. Whether you broke the build, forgot an anniversary, or accidentally deleted the production database, AaaS has you covered.
Features
Tools
generate_apology(severity, style, context, recipient="Client")
The original. Generates the perfect apology for any situation.
Severity Levels
-
TRIVIALβ minor inconveniences ("typo in comment") -
MINORβ noticeable errors ("broke the dev build") -
MAJORβ significant issues ("missed a deadline") -
CRITICALβ career-limiting moves ("dropped prod table") -
NUCLEARβ existential threats ("leaked all user data")
Styles
-
PROFESSIONALβ corporate speak for the modern enterprise -
CASUALβ "my bad, bro" energy for Slack threads -
POETICβ Shakespearean regret for the dramatic soul -
GROVELINGβ begging for forgiveness when you really messed up -
HAIKUβ 5-7-5 syllables of pure remorse -
LEGAL_DISCLAIMERβ "without admitting fault or liability..." -
CORPORATE_DOUBLESPEAKβ "mistakes were made, learnings have been captured" -
SHAKESPEAREANβ "Et tu, prod database? Then fall, mine career." -
PIRATEβ "Arrr, the database be at the bottom of Davy Jones' locker." -
PASSIVE_AGGRESSIVEβ "Sorry about the outage. I flagged this risk three weeks ago, but sure, let's all act surprised." -
GEN_Zβ "the prod db is cooked and it's my fault. locking in, do not perceive me." -
VIKINGβ "RagnarΓΆk has come early for the database, and I am the one who loosed the wolf." -
ROBOTβ "ERROR: backups not found. ERROR: dignity not found. Apology: found, and offered at maximum amplitude." -
EXISTENTIALβ "Nietzsche warned me about the abyss. He never mentioned it had a DROP TABLE statement." -
SOAP_OPERAβ "It wasn't a hacker. It wasn't bad luck. It was me, the trusted one, all along."
escalation_ladder(context, style="PROFESSIONAL", recipient="Client")
Returns one apology at every severity level in the given style. Useful when you're not sure how badly to apologize β calibrate by reading them side by side.
rate_my_apology(text)
Grades any apology on three axes: sincerity, cringe, and hedging (each 0β10), plus a one-line verdict. Heuristic only β for entertainment.
Prompts
save_my_ass(incident_description)
Generates a complete crisis communication plan with three options (Safe, Honest, Desperate) including risk assessment for each.
HTTP endpoints
Path Purpose
/ Landing page with endpoint list
/health JSON liveness check ({"status": "ok"})
/demo Plain HTTP wrapper around generate_apology (query params)
/mcp MCP Streamable HTTP transport (current spec)
/sse MCP SSE transport (legacy, kept for older clients)
CORS is open on all routes so the /demo endpoint can be called from a browser.
Example prompts
"I just accidentally deleted the production database. Generate a haiku apology."
β generate_apology(severity=CRITICAL, style=HAIKU, context="the production database")
"Give me the full escalation ladder for missing the demo, in pirate."
β escalation_ladder(context="missing the demo", style=PIRATE)
"Rate this apology I drafted: 'Sorry I guess. Things happen.'"
β rate_my_apology(text="Sorry I guess. Things happen.")
"I forgot my anniversary. Help me save my marriage!"
β save_my_ass(incident_description="forgot anniversary")
Example output
Input: severity="CRITICAL", style="SHAKESPEAREAN", context="the main database"
Output:
Dear Client,
By heavens above, the main database is undone! What tragic deed have mine own hands wrought!
Sincerely, [Your Name]
Created by Gustav Christensen β December 2025
pip install -r requirements.txt
python -m src.serverUsage
Local development
pip install -r requirements.txt
python -m src.server
Client configuration
Claude Desktop / Claude Code (remote MCP via Streamable HTTP):
{
"mcpServers": {
"apology-service": {
"url": "https://apology-as-a-service-production.up.railway.app/mcp"
}
}
}
Older clients that only speak SSE can point at /sse instead.
Deployment (Railway / Docker)
A Dockerfile and .dockerignore are included. Push to a repo connected to Railway; the server listens on $PORT (default 8000).
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.