senja-mcp
Allows filtering testimonials by source, such as Google, to retrieve testimonials from that platform.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@senja-mcplist testimonials with rating 5"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Server for Senja (unofficial)
Collect, Manage and Share Testimonials - The easiest way to collect testimonials and add them to your website. Get started for free.
An MCP (Model Context Protocol) server for the Senja testimonial API. This server allows AI assistants like Claude to interact with your Senja testimonials through standardized MCP tools.
Features
List testimonials with filtering by approval status, rating, type, integration source, tags, and language
Get a specific testimonial by ID
Create new testimonials with full support for customer details, ratings, tags, and media
Related MCP server: X(Twitter) V2 MCP Server
Prerequisites
Node.js 18+
A Senja account on the Starter or Pro plan
A Senja API key (available from the Automate section in your Senja dashboard)
Setup
Clone this repository:
git clone https://github.com/andrewconnell/senja-mcp.git cd senja-mcpInstall dependencies:
npm installBuild the project:
npm run build
Configuration
Claude Desktop
Add the following to your Claude Desktop configuration file (claude_desktop_config.json):
{
"mcpServers": {
"senja": {
"command": "node",
"args": ["/path/to/senja-mcp/lib/index.js"],
"env": {
"SENJA_API_KEY": "your-senja-api-key"
}
}
}
}Claude Code
Add the following to your Claude Code MCP settings:
{
"mcpServers": {
"senja": {
"command": "node",
"args": ["/path/to/senja-mcp/lib/index.js"],
"env": {
"SENJA_API_KEY": "your-senja-api-key"
}
}
}
}Environment Variables
Variable | Required | Description |
| Yes | Your Senja API key |
Available Tools
list_testimonials
Retrieve testimonials with optional filtering and sorting.
Parameters:
sort— Sort bydateorrating(default:date)order— Sort direction:ascordesc(default:desc)approved— Filter by approval statusrating— Filter by star rating (1-5)type— Filter by type:textorvideointegration— Filter by source (e.g.,twitter,google,linkedin)tags— Filter by tag nameslang— Filter by language (ISO 639 code)limit— Number of results (1-1000, default: 100)page— Page number for pagination
get_testimonial
Retrieve a specific testimonial by ID.
Parameters:
id— The testimonial ID (required)
create_testimonial
Create a new testimonial.
Parameters:
type— Testimonial type:textorvideo(required)customer_name— Name of the customer (required)title— Testimonial title/headlinetext— Testimonial text contentrating— Star rating (1-5)url— Source URLdate— Date in ISO 8601 formatapproved— Whether the testimonial is approvedcustomer_email— Customer emailcustomer_avatar— Customer avatar URLcustomer_company— Customer company namecustomer_tagline— Customer tagline or job titlecustomer_website— Customer website URLintegration— Integration source identifiertags— Tags to applyvideo_url— Video URL (for video testimonials)
License
MIT
Available Tools
3 toolscreate_testimonialCreate TestimonialB
Create a new testimonial in your Senja project.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Source URL | |
| date | No | Date in ISO 8601 format (e.g., 2024-01-15T00:00:00Z) | |
| tags | No | Tags to apply to the testimonial | |
| text | No | Testimonial text content | |
| type | Yes | Testimonial type: text or video | |
| title | No | Testimonial title/headline | |
| rating | No | Star rating (1-5) | |
| approved | No | Whether the testimonial is approved | |
| video_url | No | Video URL (for video testimonials) | |
| integration | No | Integration source identifier | |
| customer_name | Yes | Name of the customer | |
| customer_email | No | Customer email | |
| customer_avatar | No | Customer avatar URL | |
| customer_company | No | Customer company name | |
| customer_tagline | No | Customer tagline or job title | |
| customer_website | No | Customer website URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'create a new testimonial,' which indicates a write operation, but gives no information about side effects, idempotency, permissions, required fields beyond the schema, or what happens on creation. For a mutation tool with no annotation coverage, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or repetition. It communicates the essential action and scope efficiently, which is appropriate for a tool whose parameter details are fully captured in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 16 parameters, no annotations, and no output schema, this one-sentence description is not enough to fully orient an agent. It provides project context but omits behavioral expectations, creation semantics, and any guidance on required versus optional inputs beyond what the schema lists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all 16 parameters with meaningful descriptions. The tool description adds no additional parameter context, which matches the baseline of 3 when the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('create') and resource ('testimonial'), and names the Senja project context. It is distinct from the sibling tools list_testimonials and get_testimonial, so an agent can tell create from read/list operations without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation type (create) clearly implies this should be used when adding a new testimonial, while list_testimonials and get_testimonial are for reading. However, it lacks explicit guidance about when not to use it or how to choose among alternatives in ambiguous cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_testimonialGet TestimonialA
Retrieve a specific testimonial by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The testimonial ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It communicates a non-mutating read operation but does not disclose error behavior, return format, or authorization requirements. It is minimally transparent but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single succinct sentence that immediately conveys the action, resource, and selection criterion with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read operation with a clear schema and sibling context, the definition is adequate. It lacks an output schema or error-handling notes, but the simplicity of the tool keeps this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameter and already describes 'id' as 'The testimonial ID'. The description merely repeats 'by its ID' without adding format, example, or distinction from other identifier parameters, so it adds little beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (retrieve) and resource (testimonial) scoped by ID, clearly distinguishing it from list_testimonials (which retrieves many) and create_testimonials (which creates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies using this tool when you have a specific testimonial ID and need that one record. It does not explicitly mention alternatives, but the sibling names and the 'by its ID' phrase provide sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_testimonialsList TestimonialsB
Retrieve testimonials from your Senja project with optional filtering and sorting.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Filter by language (ISO 639 code) | |
| page | No | Page number | |
| sort | No | Sort by date or rating (default: date) | |
| tags | No | Filter by tag names | |
| type | No | Filter by testimonial type | |
| limit | No | Number of results to return (1-1000, default: 100) | |
| order | No | Sort direction (default: desc) | |
| rating | No | Filter by star rating (1-5) | |
| approved | No | Filter by approval status | |
| integration | No | Filter by integration source (e.g., twitter, google, linkedin) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavior disclosure. It does state the operation is a retrieval (read-only) and explicitly mentions supported behaviors (optional filtering and sorting), which is useful. However, it lacks context about response shape, pagination behavior, defaults, or any access-related caveats, leaving notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. The core action and resource are front-loaded, and the key extensibility (filtering/sorting) is included without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 10-parameter tool with no output schema and no annotations, the description is too minimal. It does not describe what the return value looks like, mention defaults, or provide any usage context beyond the basic operation. For an agent to call this tool correctly, it would need more guidance on expected output or additional behavioral constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all 10 parameters. The description does not add any parameter-level details beyond what is in the schema. The generic phrase 'optional filtering and sorting' adds no semantic value over the structured parameter definitions, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb ('Retrieve'), a concrete resource ('testimonials from your Senja project'), and mentions the key behaviors of filtering and sorting. It naturally distinguishes itself from siblings: get_testimonial (single item) and create_testimonial (write operation) through the plural resource and read-oriented verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the siblings. The description does not mention that get_testimonial should be used for a single testimonial or create_testimonial for adding one. The intended usage is implied by the name and description, but no explicit when/when-not guidance is provided.
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.
3 tool updates
v1.0.1- First observed
create_testimonial - First observed
get_testimonial - First observed
list_testimonials
TDQS
Scored across 3 tools
Each tool targets a distinct operation: listing all testimonials, fetching a single testimonial by ID, and creating a new one. There is no overlap or ambiguity between these three actions.
All tool names follow the consistent verb_noun pattern: list_testimonials, get_testimonial, create_testimonial. The naming is predictable and uniform.
With three tools covering the core actions for the testimonial domain, the count is well-scoped and appropriate for a simple resource-focused server.
The tool set covers list, get, and create, but lacks update and delete operations that would normally be expected for a complete testimonial lifecycle. This is a notable gap, though agents can still read and add testimonials.
Maintenance
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI dialogue using various LLM models via AceDataCloud
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- AlicenseAqualityFmaintenanceAn MCP server that enables AI assistants to access and interact with Reddit content through features like user analysis, post retrieval, subreddit statistics, and authenticated posting capabilities.15301MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for interacting with the Twitter/X API v2, enabling AI assistants to retrieve tweets, post content, reply, quote, and more programmatically.1,020 npm13MIT
- AlicenseBqualityCmaintenanceA local, open-source MCP server that provides AI assistants with tools to interact with the PensionPro REST API.3224 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceA plugin-based MCP server that enables AI assistants to interact with external systems through custom tools, resources, and prompts.4AGPL 3.0