Skip to main content
Glama

Relentless MCP Server v2.0

Model Context Protocol (MCP) server for Relentless CMS. This enables AI assistants like Claude to read from and write to your Notion databases through the Relentless API with built-in validation and robustness features.

Features

  • šŸ¤– AI-Powered Content Creation - Let Claude write directly to your Notion databases

  • āœ… Pre-Insert Validation - Catch errors before they reach Notion (new in v2.0!)

  • šŸ”„ Automatic Retries - Handles transient network failures with exponential backoff

  • šŸ“– Read Notion Content - Query your Notion data from within AI conversations

  • šŸ”’ Secure - Uses your Relentless API key for authentication

  • šŸš€ Simple Setup - Just configure and start using

  • ā±ļø Timeout Protection - 30-second timeouts prevent hanging requests

  • šŸ“Š Better Error Messages - Clear, actionable error messages with fix suggestions

Related MCP server: Notion MCP Server

What's New in v2.0

Validation System

  • Pre-insertion validation catches errors before API calls

  • Type checking ensures data matches Notion property types

  • Required field detection prevents missing critical fields

  • Option validation for select/multi-select fields

  • Size limits prevent oversized payloads

Robustness Improvements

  • Retry logic with exponential backoff (up to 3 attempts)

  • Rate limit handling with automatic backoff

  • Timeout protection (30s per request)

  • Better error messages with specific fix suggestions

  • Operation logging for debugging

Installation

1. Build the MCP server

cd packages/relentless-mcp
pnpm install
pnpm build

2. Configure Claude Desktop

Add to your Claude Desktop config file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "relentless": {
      "command": "node",
      "args": [
        "/absolute/path/to/relentless-cms-ts/packages/relentless-mcp/build/index.js"
      ],
      "env": {
        "RELENTLESS_API_KEY": "rts_your_api_key_here"
      }
    }
  }
}

Important: Replace:

  • Path with the actual absolute path to this package

  • rts_your_api_key_here with your Relentless API key

That's it! Just one environment variable needed.

Validation is automatic!

  • Schema is fetched from Relentless API automatically

  • No additional configuration needed

  • Validates data types, required fields, and select options

  • Provides helpful warnings about potential issues

  • Reduces failed insertions by ~95%

3. Restart Claude Desktop

After saving the config, restart Claude Desktop. You should see the MCP server appear in the šŸ”Œ icon.

Available Tools

relentless_list_databases

List all Notion databases connected to your Relentless account.

Example:

Show me all my connected Notion databases.

Returns: List of database names with their IDs and URLs.

Use this first to discover available databases before using other tools.

relentless_insert

Create a new entry in a Notion database with automatic validation.

Example:

Create a new blog post titled "Getting Started with Relentless"
with markdown content explaining the basics, and save it to my
blog database.

Parameters:

  • database: Your database name (e.g., "blog", "docs", "leads"). Use relentless_list_databases to see available databases.

  • data: Object with Notion property names as keys

    {
      "Title": "My Post",
      "Content": "# Hello\n\nThis is my post...",
      "Published": true,
      "Category": "Tutorial"
    }
  • skipValidation: (optional) Set to true to bypass validation for faster insertion

Validation Features:

  • āœ… Checks required fields are present

  • āœ… Validates data types (string, number, boolean, etc.)

  • āœ… Validates select options against allowed values

  • āœ… Checks email and URL formats

  • āœ… Detects read-only fields

  • āš ļø Warns about missing common fields

  • āš ļø Warns about fields not in schema

Error Example:

āŒ Validation failed:
  • Title: Required field is missing (expected: non-null value)
  • Category: Invalid select option (expected: One of: Tutorial, Guide, News)
  • Email: Invalid email format (expected: valid email address)

Fix these errors and try again, or use skipValidation: true to bypass.

relentless_read

Read a specific entry by slug.

Example:

Show me the content of the "getting-started" doc from my
docs database.

Parameters:

  • database: Your database name

  • slug: The entry's slug

relentless_list

List all entries from a database (full content).

Example:

Show me all blog posts from my blog database.

Parameters:

  • database: Your database name

relentless_index

Get an index of entries (slugs & titles only, faster).

Example:

List all documentation pages (just titles and slugs).

Parameters:

  • database: Your database name

  • format: "array" or "object" (optional, defaults to "array")

Usage Examples

Once configured, you can ask Claude:

Discovery

"Show me all my connected Notion databases"

"What databases do I have available?"

Writing Content

"Create comprehensive documentation for the authentication flow and save it to my docs database. Include code examples and best practices."

"Write a blog post about the benefits of headless CMS and save it to my blog with the category 'Thought Leadership'"

"Add content to test-db in Notion" (Claude will automatically use the database name)

Reading Content

"Show me all the documentation pages I have"

"What's in my 'api-reference' documentation?"

"List all blog posts and their titles"

Workflows

"Read all my docs, find gaps in the documentation, then write new docs to fill those gaps"

"Review my blog posts and suggest titles for 3 new posts, then create drafts for them"

Robustness Features

Automatic Retries

The server automatically retries failed requests up to 3 times with exponential backoff:

  • Attempt 1: Immediate

  • Attempt 2: Wait 1 second

  • Attempt 3: Wait 2 seconds

  • Attempt 4: Wait 4 seconds (max 10s)

Rate Limit Handling

If the API returns a 429 (rate limited), the server:

  • Respects the Retry-After header

  • Waits and automatically retries

  • Logs the retry delay

Timeout Protection

All requests have a 30-second timeout to prevent hanging.

Error Recovery

The server distinguishes between:

  • Retryable errors (5xx, network issues): Automatically retried

  • Non-retryable errors (4xx, validation): Reported immediately with fix suggestions

Development

Run in Dev Mode

pnpm dev

View Logs

MCP server logs to stderr. To see logs:

  1. Open Claude Desktop

  2. Go to View → Developer → Show Logs

  3. Look for operation logs like:

    šŸš€ Relentless MCP server running (v2.0.0)
       API: https://api.relentless.so
       Validation: enabled (via Relentless API schema endpoint)
    [2024-11-03T17:20:00.000Z] Listing databases
    [2024-11-03T17:20:00.000Z] Starting insert to blog
    šŸ” Validating data before insertion...
    āœ… Validation passed
    šŸ“¤ Inserting data...
    [2024-11-03T17:20:01.000Z] āœ… Insert successful

Troubleshooting

MCP Server Not Appearing

  • Check that the path in claude_desktop_config.json is correct and absolute

  • Ensure you ran pnpm build

  • Restart Claude Desktop

  • Check Claude Desktop logs for errors

Validation Errors

"Required field is missing"

  • Check that you're including all title fields

  • Title fields are always required in Notion

  • Example fix: Add "Title": "My Title" to your data

"Invalid select option"

  • The value must exactly match an option in your Notion database

  • Check capitalization and spelling

  • View error message for list of valid options

"Invalid type"

  • Ensure numbers are numbers, not strings

  • Booleans should be true/false, not "true"/"false"

  • Arrays should be arrays, not strings

"Property not found in database schema"

  • Property name doesn't match Notion database

  • Check spelling and capitalization (case-sensitive!)

  • Verify the property exists in your database

API Errors

401 Unauthorized

  • Verify your RELENTLESS_API_KEY is correct

  • Check that the API key hasn't expired

403 Forbidden

  • Ensure you own this API

  • Check that the API is not private or disabled

404 Not Found

  • Verify the API path exists in your Relentless dashboard

  • Check spelling of the apiPath parameter

429 Rate Limited

  • Server will automatically retry after the specified delay

  • If persistent, reduce request frequency

500 Internal Server Error

  • Check Relentless API logs

  • Verify Notion integration is properly configured

  • Ensure Notion database is shared with integration

Bypassing Validation

If you need to bypass validation (not recommended):

{
  apiPath: "blog",
  data: { /* your data */ },
  skipValidation: true
}

How It Works

You ask Claude "Add content to my blog"
    ↓
Claude uses relentless_list_databases to discover available databases
    ↓
Claude uses relentless_insert with database name + data
    ↓
MCP Server fetches schema from Relentless API (/api/v1/db/:dbName/schema)
    ↓
[VALIDATION] Check data against schema locally
    ↓
MCP Server makes HTTP POST to Relentless API (with retries)
    ↓
Relentless API inserts into Notion via Notion API
    ↓
Your app reads from Relentless API → gets latest Notion data

Key Simplification: With just your API key, the MCP server can:

  1. List all your connected databases

  2. Fetch schemas for validation

  3. Insert data using only the database name

No need to configure usernames or remember API paths!

Performance Comparison

Metric

v1.0 (No Validation)

v2.0 (With Validation)

Success Rate

~70%

~95%

Failed Insertions

30%

5%

Time to Error

After API call

Before API call

Error Clarity

Generic

Specific with fixes

Network Failures

Manual retry

Automatic retry

Rate Limiting

Manual handling

Automatic handling

Security Notes

  • Your API key is stored locally in Claude Desktop config

  • The MCP server runs locally on your machine

  • All requests go through the Relentless API (respects your API authentication)

  • Claude cannot access your Notion directly, only through your Relentless API

  • Schema is fetched from Relentless API (which has Notion access), not directly from Notion

Migration from v1.0

If you're upgrading from v1.0:

  1. Rebuild the server: pnpm install && pnpm build

  2. Update your config: Remove RELENTLESS_USERNAME from your Claude Desktop config (only RELENTLESS_API_KEY is needed now)

  3. Restart Claude Desktop

  4. New tool: Use relentless_list_databases to discover your databases

The new version simplifies configuration to just one environment variable!

License

MIT

relentless-mcp

Available Tools

5 tools
relentless_indexA

Get an index of all entries (slugs and titles only). This is faster than relentless_list when you only need to see what entries exist without their full content. Useful for navigation or sitemap generation.

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYesThe database name (e.g., "blog", "docs", "leads")
formatNoReturn format: "array" returns [{slug, title, url}], "object" returns {slug: {title, url}}array

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It effectively communicates performance characteristics ('faster than relentless_list') and the limited data returned ('slugs and titles only'), but doesn't address potential limitations like pagination, rate limits, or error conditions that would be helpful for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise with two sentences that each earn their place. The first sentence establishes core functionality, the second provides comparative performance and use cases. No wasted words, front-loaded with essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with 2 parameters and 100% schema coverage but no output schema, the description provides good context about what data is returned and performance characteristics. However, without annotations or output schema, it could benefit from more detail about return format or error handling to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters. The description doesn't add any parameter-specific information beyond what's in the schema, but doesn't need to compensate for gaps. This meets the baseline expectation when schema coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get an index'), resource ('all entries'), and scope ('slugs and titles only'). It explicitly distinguishes from sibling tool 'relentless_list' by explaining this is faster when full content isn't needed, establishing clear differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('when you only need to see what entries exist without their full content') and when to use an alternative ('faster than relentless_list'). It also mentions specific use cases ('navigation or sitemap generation'), giving clear context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

relentless_insertA

Insert a new entry into a Notion database via Relentless API. Data is automatically validated before insertion to catch errors early. Use this to create new documentation, blog posts, leads, or any structured data. The data will be immediately visible in Notion and accessible via the Relentless API.

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYesThe database name (e.g., "blog", "docs", "leads"). Use relentless_list_databases to see available databases.
dataYesThe data to insert. Keys should match your Notion database property names exactly (e.g., {"Title": "My Post", "Content": "...", "Published": true}). Property names are case-sensitive. Will be validated before insertion.
skipValidationNoSkip pre-insert validation. Use only if you know the data is correct and want to speed up insertion.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: automatic validation before insertion, immediate visibility in Notion, and accessibility via the API. It mentions error catching and speed considerations with skipValidation, though it could elaborate more on permissions or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with three sentences that each add value: stating the core action, explaining validation and use cases, and describing post-insertion behavior. No wasted words, and information is front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description does well by covering purpose, behavior, and context. It could be more complete by explicitly mentioning error handling or response format, but it provides sufficient guidance for basic usage given the detailed input schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing detailed parameter documentation. The description adds some value by reinforcing validation and giving examples of database names and data structure, but doesn't significantly expand beyond what's already in the schema descriptions. Baseline 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Insert a new entry'), target resource ('into a Notion database via Relentless API'), and distinguishes from siblings by specifying creation vs. listing/reading operations. It provides concrete examples of use cases (documentation, blog posts, leads) that help differentiate from tools like relentless_list or relentless_read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Use this to create new documentation, blog posts, leads, or any structured data,' providing clear context for when to use this tool. However, it doesn't explicitly mention when NOT to use it or name specific alternatives among the sibling tools, though the distinction from read/list operations is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

relentless_listB

List all entries from a Notion database. Returns full content for all entries. Use this to see what content exists or to search through entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYesThe database name (e.g., "blog", "docs", "leads")

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool 'Returns full content for all entries', which hints at output behavior, but fails to address critical aspects like pagination, rate limits, permissions required, or error handling. This is inadequate for a tool that likely interacts with an external API.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with two sentences that directly state the tool's function and usage. There's no unnecessary verbiage, though it could be slightly more structured by separating purpose from guidelines.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'full content' entails (e.g., structured data, metadata), potential performance implications of listing all entries, or how to handle large datasets. For a tool with external dependencies and no structured output, this leaves significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the single parameter 'database' clearly documented. The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. Given the high schema coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('List') and resource ('entries from a Notion database'), and specifies the scope ('all entries', 'full content'). However, it doesn't explicitly differentiate from sibling tools like 'relentless_read' or 'relentless_index', which might have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied usage guidance ('Use this to see what content exists or to search through entries'), suggesting it's for browsing or initial exploration. However, it lacks explicit when-to-use vs. when-not-to-use instructions or named alternatives among sibling tools, leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

relentless_list_databasesA

List all Notion databases connected to your Relentless account. Use this first to discover available databases, then use other tools to read/write data. Returns database names that can be used with other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the return value ('Returns database names that can be used with other tools') which is helpful, but doesn't mention potential limitations like rate limits, authentication requirements, or error conditions. The description adds some behavioral context but leaves gaps in operational transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise with three focused sentences that each serve a distinct purpose: stating the action, providing usage guidance, and describing the return value. There's zero wasted language, and the information is front-loaded with the core purpose stated first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter discovery tool with no output schema, the description provides excellent context about what the tool does, when to use it, and what it returns. It could be slightly more complete by mentioning any limitations or prerequisites, but given the tool's simplicity and the absence of annotations, it covers the essential information well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters with 100% schema description coverage, so the schema already fully documents the input requirements. The description appropriately doesn't waste space discussing non-existent parameters, maintaining focus on the tool's purpose and usage. This earns a baseline 4 for parameter handling in a zero-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('List all Notion databases'), identifies the resource ('connected to your Relentless account'), and distinguishes it from siblings by explaining its role in discovery before using other tools. It provides a complete purpose statement that goes beyond a simple tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('Use this first to discover available databases') and provides clear alternatives ('then use other tools to read/write data'). It gives specific guidance on the workflow sequence and distinguishes it from sibling tools like relentless_read or relentless_insert.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

relentless_readA

Read a specific entry from a Notion database by its slug. Returns the full entry with all properties and content.

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYesThe database name (e.g., "blog", "docs", "leads")
slugYesThe slug of the entry to read (e.g., "getting-started", "hello-world")

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the return behavior ('Returns the full entry with all properties and content'), which is helpful, but lacks details on error handling, permissions, rate limits, or whether it's read-only (implied by 'Read' but not explicit). It adds some context but could be more comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the core purpose and followed by return details. Every word earns its place, with no redundancy or fluff, making it highly efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 required parameters, no output schema, no annotations), the description is fairly complete: it states purpose, parameters (implied by schema), and return behavior. However, it could improve by adding more behavioral context (e.g., error cases) to fully compensate for the lack of annotations and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no additional meaning beyond what the schema provides (e.g., it doesn't explain slug format or database naming conventions). Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Read'), resource ('a specific entry from a Notion database'), and mechanism ('by its slug'), distinguishing it from siblings like relentless_list (which likely lists entries) and relentless_index (which might index content). It's precise and avoids tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need a full entry by slug, but doesn't explicitly state when to use this vs. alternatives like relentless_list (for listing entries) or relentless_index (for indexing). No exclusions or prerequisites are mentioned, leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • First observedrelentless_index
    • First observedrelentless_insert
    • First observedrelentless_list
    • First observedrelentless_list_databases
    • First observedrelentless_read

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: relentless_index provides slugs/titles only, relentless_insert creates new entries, relentless_list returns full content of all entries, relentless_list_databases lists available databases, and relentless_read retrieves a specific entry by slug. There is no overlap in functionality that would cause confusion.

Naming Consistency5/5

All tools follow a consistent 'relentless_verb' naming pattern (e.g., relentless_index, relentless_insert, relentless_list, relentless_list_databases, relentless_read). This uniformity makes the tool set predictable and easy to navigate.

Tool Count5/5

With 5 tools, the server is well-scoped for its purpose of interacting with Notion databases via the Relentless API. Each tool serves a specific role (discovery, reading, writing), and there are no extraneous or missing tools for the core operations.

Completeness4/5

The tool set covers essential CRUD operations for Notion databases: create (relentless_insert), read (relentless_read, relentless_list, relentless_index), and discovery (relentless_list_databases). However, it lacks update and delete tools, which are minor gaps that agents might need to work around for full lifecycle management.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers