No-as-a-Service

Because your time is valuable. Allegedly.

A free API that says no so you don't have to. Because apparently that's hard.

1,021
Ways to Say No
4
Politeness Levels
$0
What You'll Pay

What Is This?

NoaaS is a free API that returns creative ways to decline things. Because apparently "no" by itself is too simple for modern society, and you need 1,021 different ways to say it while maintaining plausible deniability.

Perfect for people who struggle with boundaries, have too many meetings, or need to sound polite while absolutely meaning the opposite. No installation required. Just use the API.

Polite

For when you want them to think you actually considered their request

Humorous

Because adding a joke makes rejection feel less like rejection (it doesn't)

Professional

Corporate-approved ways to say no while sounding like you care (you don't)

Creative

For people who think being clever makes them more interesting (debatable)

Try It Live

Pick a category and witness the magic of professional rejection. Or don't. We're not invested in your decisions.

Click a category above to get started.

Features Worth Mentioning

Completely Free

No credit card, no signup, no value proposition

Fast Response Times

Because waiting to say no is apparently unacceptable

Global Distribution

Say no from anywhere in the world, instantly

No Tracking

We don't care enough to track you

Rate Limited

30 requests per minute. One every 2 seconds. Still generous.

MCP Compatible*

*Via a local stdio wrapper because SSE transport would make too much sense

1,000+ Responses

Because apparently 100 ways to say no wasn't excessive enough

No Authentication

Just send requests. We're too lazy to implement OAuth.

On The State of Intelligent Agents

You'd think "intelligent" agents could fetch data from URLs like every browser since 1995. You'd be wrong.

Instead, we're in an era where AI can write poetry but can't make an HTTP request without a local process translating stdio streams. You still can't order pizza from Claude without manually editing JSON config files and remembering absolute file paths. Progress.

We're told this is the future of computing. If that's true, the future involves a lot more npm install than anyone expected. But sure, let's call it "intelligent" and move on.

📝 On Differing Approaches

Some professionals invest significant energy explaining how MCP will transform everything. Their conviction is impressive. Others—yourself included—spend time debugging JSON configurations and manually copying file paths. Both groups are clearly committed to their respective paths. History will eventually reveal which approach was worth the effort. Or perhaps neither. These things have a way of resolving themselves, usually through disappointment. We appreciate your participation in this process.

Two Access Methods

We offer both a straightforward REST API and a more... architecturally ambitious MCP server. Choose whichever matches your tolerance for complexity.

REST API

Call an HTTP endpoint. Get a response. That's all. If this sounds appealing, you're probably the kind of person who reads documentation. How refreshing.

MCP Server (For Claude Desktop)

Claude Desktop has interesting opinions about network communication. Rather than using HTTP directly, it prefers local processes communicating via stdio streams. We've accommodated this preference.

⚠️ A Note on Architecture

The MCP server runs locally on your machine and translates stdio messages into HTTP requests to our API. Think of it as a helpful intermediary between Claude Desktop's architectural preferences and how the rest of the internet works.

This requires cloning a repository, running npm install, configuring absolute paths, and editing JSON files. We're confident you'll find the experience character-building.

For most applications: Send an HTTP request to our REST API. Receive a response. This is how the internet has worked for decades.

For Claude Desktop: The MCP Server runs on your computer, receives stdio messages from Claude, translates them into HTTP requests, sends them to our REST API, receives the HTTP response, translates it back to stdio, and returns it to Claude. This adds several steps between Claude and the internet, which we're confident has perfectly sound architectural reasoning.

The installation instructions below will guide you through whichever path you've chosen.

Use with Claude Desktop

Because apparently saying "no" requires downloading a repo and running build scripts now.

⚠️ Why Can't I Just Use a URL?
Claude Desktop spawns local processes via stdio. It can't just fetch from the internet like a normal application. So you get to clone a repo, run npm install, and remember where you put things. Architecture™.

1. Install Prerequisites

Node.js (v18+) and Git. You know the drill:

  • macOS: brew install node git
  • Windows: nodejs.org (sorry)
  • Linux: You already know

2. Clone and Build

Standard ritual. The last command shows your path — copy it:

cd ~ git clone https://github.com/Koneisto/no-as-a-service.git cd no-as-a-service npm install npm run mcp:build pwd

Write down that path. You'll need it in step 3. It looks like /Users/yourname/no-as-a-service

3. Edit Claude Desktop Config

Find your config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

Add this. Replace /YOUR/PATH/HERE with the path you just copied:

{ "mcpServers": { "noaas": { "command": "node", "args": [ "/YOUR/PATH/HERE/no-as-a-service/build/mcp-server.js" ], "env": { "API_BASE_URL": "https://api.mcp-for-no.com" } } } }

⚠️ One typo and nothing works. Case-sensitive. Forward slashes only. You have been warned.

4. Restart Claude Desktop

Quit the app completely (not just close the window). Reopen. Ask Claude something like:

  • "Give me a creative way to decline"
  • "I need to say no to this meeting"

Doesn't work? You probably typo'd the path. Check your config.

When Things Break:
  • JSON syntax error? jsonlint.com
  • File not found? ls build/mcp-server.js to verify
  • Still broken? Check logs: ~/Library/Logs/Claude/mcp*.log

Use with Cursor IDE

Cursor also jumped on the MCP bandwagon. Same local installation dance, different config file.

Already installed for Claude Desktop?
Skip straight to step 2. You've already done the hard part.

1. Clone and Build (if you haven't)

Same as Claude Desktop. Skip if already done:

cd ~ git clone https://github.com/Koneisto/no-as-a-service.git cd no-as-a-service npm install npm run mcp:build pwd

2. Edit Cursor MCP Config

Create or edit your config file:

  • Global: ~/.cursor/mcp.json
  • Project-specific: <project>/.cursor/mcp.json

Add this. Replace /YOUR/PATH/HERE with your path:

{ "mcpServers": { "noaas": { "command": "node", "args": [ "/YOUR/PATH/HERE/no-as-a-service/build/mcp-server.js" ], "env": { "API_BASE_URL": "https://api.mcp-for-no.com" } } } }

3. Restart Cursor

Close and reopen Cursor. The NoaaS tools should now be available in your AI assistant.

Using the API Directly

For those who prefer to write code instead of using convenient interfaces. We respect your life choices.

Get a Random Rejection

curl -X POST https://api.mcp-for-no.com/v1/tools/call \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"getRandomNo","params":{"category":"humorous"},"id":1}'

JavaScript Example

const response = await fetch('https://api.mcp-for-no.com/v1/tools/call', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', method: 'getRandomNo', params: { category: 'professional' }, id: 1 }) }); const data = await response.json(); console.log(data.result.response);

Python Example

import requests response = requests.post( 'https://api.mcp-for-no.com/v1/tools/call', json={ 'jsonrpc': '2.0', 'method': 'getRandomNo', 'params': {'category': 'polite'}, 'id': 1 } ) print(response.json()['result']['response'])

Available Categories

Pick a category if you're feeling picky. Or don't, and get whatever we feel like giving you:

Questions You Might Actually Ask

Is this really free?

Yes. Completely free. Forever. No catch. Which should make you suspicious, but here we are.

What are the rate limits?

30 requests per minute per IP. One every 2 seconds. If you need more than that, you're doing something wrong.

Can I use this in my application?

Of course. Personal or commercial, we don't discriminate. Just don't blame us when your users hate your app.

Is there an SLA or uptime guarantee?

This is a free service. Your expectations should be calibrated accordingly.

How long will this service be up?

We have such a long history of saying no that people rarely ask us for anything anymore. So, indefinitely? Hard to say. No guarantees, obviously. Plan accordingly.

Can I request new rejection messages?

You could. Whether we'll add them depends on factors we won't elaborate on. Try GitHub issues if you're feeling optimistic.

Who made this?

People with time on their hands and questionable priorities. Much like yourself, probably.