Customer Registration MCP Server
This server provides customer management, Brazilian address lookup, and payment plan retrieval through an MCP-compliant interface with AI chatbot integration.
Core Capabilities:
Customer Registration - Create new customers with required fields (name, email, phone) and optional fields including address details, UTM tracking parameters, identification documents (e.g., CPF), retention flags, company IDs, categorization list IDs, tags, and URLs
Brazilian Address Lookup - Retrieve complete address information using CEP (Brazilian postal code) in formats XXXXX-XXX or XXXXXXXX via ViaCEP service, returning street, neighborhood, city, and state data
Payment Plan Retrieval - Query available payment options including credit card installments (1x to 12x), PIX, and bank slip (boleto) with automatic price calculations and Portuguese summaries
AI-Powered Chatbot - Interact via natural language through REST API endpoints (
/api/chat,/api/chat/reset,/health) powered by OpenAI GPT-4o-mini, supporting Portuguese and English with multi-turn conversation history managementMCP Protocol Compliance - Function as standard MCP server with stdio transport for integration with MCP-compatible clients like Claude Desktop, enabling direct tool access
Automated Validation - Enforce required fields, validate email formats, and handle error scenarios before API submission
Configurable Personality - Customize chatbot tone and style via environment variables (AGENT_TONE or AGENT_STYLE)
Deal Creation - Optionally trigger CRM deal creation during customer registration
Development Tools - Includes TypeScript implementation, logging, and both development and production modes
Powers an AI chatbot using GPT-4o-mini for natural language processing and automated tool invocation based on conversation context.
Retrieves payment plan information including PIX instant payment options for Brazilian e-commerce checkout processes.
Click on "Install 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., "@Customer Registration MCP Serverregister Tony Stark with email newone@avengers.com and phone (12) 99756-0001"
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.
Customer Management & Payment Plans MCP Server & Chatbot
This project provides two main components:
MCP Server: A Model Context Protocol server for customer management, address lookup, and payment plan retrieval
AI Chatbot: An OpenAI GPT-4o-mini powered chatbot that integrates with the MCP server via REST API
Features
MCP Server
✅ MCP-compliant server implementation (stdio transport)
✅ Bearer token authentication
✅ Three integrated tools:
createCustomer- Customer registration with validationgetAddressByZipcode- Brazilian CEP address lookuplist_payment_plans- Payment plan retrieval (credit card, PIX, bank slip)
✅ Required field validation
✅ Comprehensive error handling
✅ Development logging
✅ TypeScript implementation
AI Chatbot
✅ OpenAI GPT-4o-mini integration
✅ Configurable tone/style via environment variables
✅ REST API endpoint (
/api/chat)✅ Automatic MCP tool invocation based on conversation
✅ Conversation history management
✅ Express-based HTTP server
Related MCP server: API Registry MCP Server
Prerequisites
Node.js 18+
Yarn package manager
Installation
Install dependencies:
yarn installConfigure environment variables:
Copy the example file and edit with your values:
cp .env.example .envEdit .env:
# MCP Server Configuration
CUSTOMER_API_HOST=https://your-api-host.com
CUSTOMER_API_TOKEN=your_bearer_token_here
NODE_ENV=development
# Payment Plans Configuration
CHECKOUT_ID=your_checkout_id_here
PRODUCT_ID=36,42
# Chatbot Configuration
OPENAI_API_KEY=sk-your-openai-api-key-here
OPENAI_MODEL=gpt-5-nano
AGENT_TONE=Professional, helpful, and efficient
# Alternative: AGENT_STYLE=Encouraging, visionary, witty
# Chatbot Server Port (optional, defaults to 3000)
CHATBOT_PORT=3000Note: AGENT_TONE or AGENT_STYLE controls the chatbot's personality.
Usage
Running the MCP Server (standalone)
Development Mode:
yarn devOr with watch mode:
yarn watchProduction Mode:
# Build
yarn build
# Run
yarn startRunning the AI Chatbot Server
Development Mode:
yarn chatbot:devProduction Mode:
# Build
yarn chatbot:build
# Run
yarn chatbot:startThe chatbot server will start on port 3000 (or your configured CHATBOT_PORT).
Chatbot API Endpoints
POST /api/chat
Send a message to the chatbot:
curl -X POST http://localhost:3000/api/chat \
-H "Content-Type: application/json" \
-d '{
"message": "Register a customer: John Doe, john@example.com, +1234567890",
"context": {}
}'Response:
{
"reply": "Great! I've successfully registered John Doe as a customer. The customer ID is 12345.",
"actions": [
{
"tool": "createCustomer",
"input": {
"name": "John Doe",
"email": "john@example.com",
"phone": "+1234567890"
},
"result": {
"status": "success",
"customerId": 12345,
"data": {...}
}
}
]
}POST /api/chat/reset
Reset the conversation history:
curl -X POST http://localhost:3000/api/chat/resetGET /health
Health check:
curl http://localhost:3000/healthMCP Tools
Tool 1: createCustomer
Required Parameters
name(string): Customer full nameemail(string): Customer email address (validated)phone(string): Customer phone number
Optional Parameters
retention(boolean): Retention flagidentification(string): Customer ID document (e.g., CPF)zipcode(string): ZIP/Postal codestate(string): State/Provincestreet(string): Street namenumber(string): Street numberneighborhood(string): Neighborhoodcity(string): Citylist_ids(number): List ID for categorizationcreate_deal(boolean): Whether to create a dealtags(string): Tags for the customerurl(string): URL referenceutm_term(string): UTM term parameterutm_medium(string): UTM medium parameterutm_source(string): UTM source parameterutm_campaign(string): UTM campaign parametercompany_id(string): Company IDutm_content(string): UTM content parameter
Example Request
{
"name": "Tony Stark",
"email": "newone@avengers.com",
"phone": "(12) 99756-0001",
"city": "São Paulo",
"retention": true,
"identification": "251.482.720-58",
"tags": "coyo-jan"
}Example Success Response
{
"status": "success",
"customerId": 12345,
"data": {
"id": 12345,
"name": "Tony Stark",
"email": "newone@avengers.com",
...
}
}Example Error Response
{
"status": "error",
"error": "Validation failed",
"errors": [
"email is required",
"phone is required"
]
}Tool 2: getAddressByZipcode
Lookup Brazilian addresses by CEP (zipcode).
Required Parameters
zipcode(string): Brazilian CEP in format XXXXX-XXX or XXXXXXXX (8 digits)
Example Request
{
"zipcode": "01310-100"
}Example Success Response
{
"cep": "01310-100",
"logradouro": "Avenida Paulista",
"bairro": "Bela Vista",
"localidade": "São Paulo",
"uf": "SP"
}Tool 3: list_payment_plans
Retrieve available payment plans for checkout offers. Configuration is read from environment variables (CHECKOUT_ID and PRODUCT_ID).
Required Parameters
None - the tool uses configuration from environment variables.
Configuration (Environment Variables)
CHECKOUT_ID(string): Checkout page identifierPRODUCT_ID(string): Comma-separated product IDs (e.g., "36,42")
Example Response
{
"checkout_id": "checkout_abc123",
"product_id": "36,42",
"plans": {
"credit_card": [
{ "installments": 1, "value": 1096.00 },
{ "installments": 2, "value": 548.00 },
{ "installments": 3, "value": 365.33 },
{ "installments": 6, "value": 182.67 },
{ "installments": 12, "value": 91.33 }
],
"pix": [
{ "value": 1096.00 }
],
"bank_slip": [
{ "value": 1096.00 }
]
},
"payment_summary": "Temos pagamentos em até 12x de R$ 91,33 no cartão de crédito, ou à vista no PIX por R$ 1.096,00 ou boleto por R$ 1.096,00."
}Notes
The API is called once with the full
product_idstring (comma-separated)Backend processes multiple product IDs and returns combined payment conditions
Fine, fine_tax, and late_interest fields are automatically ignored
Payment summary is generated in Portuguese (Brazil)
Example Error Response
{
"error": "Request failed with status code 401",
"statusCode": 401
}Configuring with MCP Clients
To use this server with an MCP-compatible client (like Claude Desktop), add the following to your MCP settings configuration:
{
"mcpServers": {
"customer-registration": {
"command": "node",
"args": ["/absolute/path/to/mcpNova/build/index.js"],
"env": {
"CUSTOMER_API_HOST": "https://your-api-host.com",
"CUSTOMER_API_TOKEN": "your_bearer_token_here",
"NODE_ENV": "production",
"CHECKOUT_ID": "your_checkout_id",
"PRODUCT_ID": "36,42"
}
}
}
}How the Chatbot Works
User sends a message to
/api/chatChatbot adds message to conversation history
OpenAI GPT-4o-mini processes the message with configured system prompt
If LLM determines an action is needed (e.g.,
createCustomer,getAddressByZipcode,list_payment_plans), it responds with JSONChatbot extracts the action and calls MCP server via stdio
MCP server executes the appropriate tool:
Customer registration via external API
Address lookup via ViaCEP
Payment plans retrieval via external API
Result is returned to LLM for a friendly follow-up message in Portuguese
Final response sent back to user
Example Chatbot Conversations
Customer Registration:
User: Preciso cadastrar um cliente: João Silva, joao@email.com, (11) 98765-4321
Chatbot: Perfeito! Cadastrei o João Silva com sucesso. O ID do cliente é 67890.
Address Lookup:
User: Qual endereço do CEP 01310-100?
Chatbot: `O CEP 01310-100 corresponde a:
Avenida Paulista
Bairro: Bela Vista
São Paulo - SP`
Payment Plans:
User: Quais são as formas de pagamento?
Chatbot: `Temos as seguintes opções:
Cartão de crédito: até 12x de R$ 91,33
PIX à vista: R$ 1.096,00
Boleto à vista: R$ 1.096,00`
Multi-turn with Address:
User: Quero cadastrar um cliente
Chatbot: `Claro! Preciso de:
Nome completo
E-mail
Telefone`
User: Nome: Maria Santos, Email: maria@email.com, Telefone: (21) 99999-8888, CEP: 20040-020
Chatbot: (looks up CEP) Encontrei o endereço: Avenida Rio Branco, Centro, Rio de Janeiro - RJ. Vou cadastrar a Maria Santos com essas informações.
(creates customer)
Chatbot: Pronto! Maria Santos cadastrada com sucesso. ID: 11223
Project Structure
mcpNova/
├── src/
│ ├── index.ts # MCP Server (stdio)
│ ├── chatbotServer.ts # Express REST API server
│ └── services/
│ ├── customerService.ts # Customer API integration
│ ├── viaCepService.ts # Brazilian address lookup
│ ├── paymentPlansService.ts # Payment plans retrieval
│ ├── mcpClient.ts # MCP client (stdio communication)
│ └── chatbotService.ts # OpenAI integration & logic
├── build/ # Compiled TypeScript
├── package.json
├── tsconfig.json
├── .env # Environment variables (gitignored)
├── .env.example # Environment template
└── README.mdAPI Endpoint
POST https://{{host}}/api/v1/customers
Headers:
Authorization: Bearer {{TOKEN}}Content-Type: application/json
Development Logging
When NODE_ENV=development, the server logs:
Request URLs and payloads
Response status and data
API errors with details
Error Handling
The server handles:
Missing or invalid required fields
HTTP errors from the external API
Network connectivity issues
Invalid Bearer tokens
Malformed requests
Security
Environment variables are used for sensitive data (API host and token)
.envfiles are gitignoredBearer token is never logged or exposed
Email validation prevents basic injection attempts
License
MIT
Available Tools
1 toolcreateCustomerC
Create a new customer in the external API. Requires name, email, and phone. Supports optional fields like address, UTM parameters, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Customer full name (required) | |
| Yes | Customer email address (required) | ||
| phone | Yes | Customer phone number (required) | |
| retention | No | Retention flag | |
| identification | No | Customer identification document (e.g., CPF) | |
| zipcode | No | ZIP/Postal code | |
| state | No | State/Province | |
| street | No | Street name | |
| number | No | Street number | |
| neighborhood | No | Neighborhood | |
| city | No | City | |
| list_ids | No | List ID for categorization | |
| create_deal | No | Whether to create a deal | |
| tags | No | Tags for the customer | |
| url | No | URL reference | |
| utm_term | No | UTM term parameter | |
| utm_medium | No | UTM medium parameter | |
| utm_source | No | UTM source parameter | |
| utm_campaign | No | UTM campaign parameter | |
| company_id | No | Company ID | |
| utm_content | No | UTM content parameter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states it's a creation tool, implying mutation, but lacks details on permissions, side effects, error handling, or response format. It mentions 'external API' but doesn't clarify authentication or rate limits, leaving behavioral traits largely undisclosed.
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 front-loaded with core purpose and required fields, followed by optional examples. It's efficient with two sentences, though 'and more' is vague and could be omitted for better precision.
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 mutation tool with 21 parameters, no annotations, and no output schema, the description is incomplete. It lacks critical context like response format, error conditions, authentication needs, or system behavior, making it inadequate for safe and effective use by an agent.
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 fully documents all 21 parameters. The description adds minimal value by listing required fields and examples of optional fields (address, UTM parameters), but doesn't provide additional meaning beyond the schema. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new customer in an external API with specific required fields (name, email, phone). It distinguishes the action (create) and resource (customer), but without sibling tools, differentiation isn't applicable. It's not tautological as it adds details beyond the name.
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 provides no guidance on when to use this tool versus alternatives, prerequisites, or context. It mentions 'external API' but doesn't specify scenarios or constraints, leaving the agent with minimal usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
With only one tool, there is no possibility of confusion or overlap between tools. The tool has a clear and distinct purpose: creating a new customer.
The single tool name 'createCustomer' uses a consistent verb_noun pattern (create + Customer). Since there is only one tool, naming consistency is inherently perfect.
A single tool for a 'Customer Registration' server is too few for the apparent scope. Registration typically involves more operations like retrieving, updating, or deleting customer data, making this server feel incomplete and under-scoped.
The server is severely incomplete for customer registration. It only provides a create operation, lacking essential tools for reading, updating, or deleting customers, which are fundamental for any registration system. This will likely cause agent failures when trying to manage customer data.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage contacts, campaigns, senders, and deliverability via SuperSend API
Read SMS, WhatsApp, email, contacts and audiences from your Bird workspace, plus safe CRM writes.
CRM + visual automation builder AI agents can drive via MCP: contacts, tags, maps, email/SMS flows.
List and create Keap contacts, companies, tasks, opportunities, orders, tags and campaigns.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with GoHighLevel's complete API including contacts, opportunities, calendars, workflows, communications, and business management tools. Supports both Bearer token and OAuth2 authentication with automatic token management.388MIT
- FlicenseNot gradedqualityDmaintenanceEnables discovery, registration, and management of external API endpoints through natural language, supporting multiple authentication methods (public, API key, bearer token) with automatic endpoint testing and documentation parsing.
- FlicenseAqualityDmaintenanceEnables interaction with any REST API through token or login authentication, with automatic Swagger/OpenAPI documentation integration for endpoint discovery and comprehensive HTTP request support.7
- AlicenseBqualityDmaintenanceConnects AI assistants to the Hub API, enabling them to manage resources such as customer leads through structured tools. It provides validated operations for creating customer records, supporting specific Brazilian fiscal ID (CPF/CNPJ) validation rules.1101ISC
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rodrigoai/mcpNova'
If you have feedback or need assistance with the MCP directory API, please join our Discord server