DokaAI MCP Service POC
The DokaAI MCP Service POC provides a unified TypeScript service for business intelligence and customer analytics. You can:
Access business data via MCP tools and REST endpoints:
get_indian_users– fetch all Indian test users for segmentation, location, plan, and profile analysis.get_orders– retrieve all orders for revenue, category, delivery, payment, and risk analysis.get_user_orders– get orders for a specific user (e.g.,usr_001).get_user_business_profile– obtain a user's full profile including subscription, orders, invoices, payments, refunds, and health metrics.get_business_summary– aggregate business metrics and risk counts.REST API endpoints (e.g.,
/api/users,/api/orders) for HTTP integration.
Generate AI-guided reports using reusable MCP prompts for business summaries, customer segmentation, orders analysis, user orders, and customer health.
Leverage pre-computed metrics like
daysSinceLastLogin,overallCustomerHealth,failedPaymentCount, and risk signals for accurate analysis.Understand data context through
evidenceGuideanddataLimitationsfields returned with major responses.Authenticate securely using OAuth (PoC) or static bearer tokens/API keys.
Integrate with AI clients (e.g., Claude Desktop) via local stdio MCP or a Vercel-hosted HTTP MCP endpoint.
Deploy as a hosted service on Vercel with health, data, and MCP endpoints.
Deploys the MCP server as a serverless HTTP endpoint, allowing remote access to the business data tools via REST APIs and MCP protocol.
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., "@DokaAI MCP Service POCshow me the business summary"
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.
DokaAI MCP Service POC
Unified TypeScript service with:
local stdio MCP server for Codex / Claude Desktop
Vercel-ready HTTP MCP endpoint
REST APIs backed by the same in-memory business data
Phase 1 production structure for auth, routes, logging, errors, computed metrics, and evals
Setup
npm install
npm run buildRelated MCP server: flipkart-seller-mcp
Local MCP
Run the stdio MCP server:
npm startCodex / Claude Desktop can still use:
{
"command": "node",
"args": ["/Users/ayushsrivastava0609/Doka-AI/mcp-server-poc/dist/index.js"]
}Vercel Deployment
Deploy this folder as the Vercel project root:
/Users/ayushsrivastava0609/Doka-AI/mcp-server-pocHosted endpoints:
GET /healthGET /api/usersGET /api/ordersGET /api/users/:userId/ordersGET /api/users/:userId/business-profileGET /api/business/summaryPOST /mcpGET /mcpDELETE /mcp
Authentication
For hosted connector authentication, the service exposes a POC OAuth flow:
/.well-known/oauth-protected-resource/mcp/.well-known/oauth-authorization-server/oauth/register/oauth/authorize/oauth/token
When ChatGPT or Claude connects to /mcp without a token, the server returns 401 with a WWW-Authenticate header pointing to the OAuth protected-resource metadata. The connector client can then start the OAuth flow.
Set this environment variable in Vercel:
OAUTH_SIGNING_SECRET=your-long-random-signing-secretDuring OAuth authorization, the demo page asks for:
DokaAI Username
DokaAI PasswordDefault mock login:
username: dokaai_demo_user
password: dokaai_demo_passwordOverride it in Vercel with:
MOCK_DOKAAI_USERNAME=your-demo-username
MOCK_DOKAAI_PASSWORD=your-demo-passwordFor this POC, a successful login creates a short-lived signed OAuth token. For production, replace this with a real user/session system.
You can also set this legacy static token for private API testing:
MCP_AUTH_TOKEN=your-long-random-token/health, /api/health, OAuth metadata, and OAuth endpoints stay public. Everything else requires either an OAuth bearer token or:
Authorization: Bearer your-long-random-tokenor:
x-api-key: your-long-random-tokenExample:
curl https://your-app.vercel.app/api/users \
-H "Authorization: Bearer your-long-random-token"MCP Tools
get_indian_users: Fetch all Indian test users from the backend API.get_orders: Fetch all business orders.get_user_orders: Fetch orders for one user, such asusr_001.get_user_business_profile: Fetch one user with subscription, orders, invoices, payments, refunds, computed metrics, risk signals, data limitations, and evidence guidance.get_business_summary: Fetch aggregate business metrics, risk counts, summary signals, data limitations, and evidence guidance.
The AI client can handle filtering, lookup, grouping, summaries, and cross-dataset reasoning from the returned data.
For better answer accuracy, important calculations are returned by the backend instead of being left to the model:
daysSinceLastLogin
daysSinceLastOrder
daysUntilRenewal
failedPaymentCount
overdueInvoiceCount
riskOrderCount
financialRisk
engagementRisk
renewalRisk
overallCustomerHealthEvery major MCP response also includes:
evidenceGuide
dataLimitationsPhase 1 Structure
The code is split by responsibility:
src/auth OAuth-shaped auth and token helpers
src/config runtime constants
src/http request/response utilities
src/logging structured JSON logger
src/mcp MCP tools, prompts, evidence, server setup
src/routes hosted MCP and REST route handlers
src/services mock data, business metrics, data limitations
src/vercel.ts thin deployment entrypointSee:
docs/phase-1-production.md
docs/evals.md
docs/usability.mdMCP Prompts
Prompts are reusable workflows the client can run.
business_summary_report: Guides the AI to produce a simple business report with overview, revenue snapshot, risk signals, patterns, recommended actions, and evidence used.customer_segmentation_report: Guides the AI to analyze users by location, plan, profession, support, and billing signals.orders_analysis_report: Guides the AI to analyze revenue, product categories, payments, fulfillment, sales channel, and order risks.user_orders_report: Guides the AI to analyze orders for one user. RequiresuserId.customer_health_report: Guides the AI to analyze one customer using profile, subscription, orders, invoices, payments, refunds, and metrics. RequiresuserId.
Available Tools
5 toolsget_business_summaryGet Business SummaryA
Fetch aggregate business metrics across users, orders, invoices, payments, refunds, and subscriptions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits such as read-only nature or potential performance impact. It only states what data is aggregated, without detailing side effects or access requirements.
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 sentence front-loads the verb and resource, with no extra words. Every part earns its place.
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 no output schema and no parameters, the description should elaborate on the shape of the return value (e.g., counts, totals) or pagination. The current description is adequate but lacks sufficient detail for a complete understanding.
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 tool has zero parameters and schema coverage is 100% trivial. The description adds value by listing the included entities (users, orders, etc.), which helps the agent understand the scope of the aggregate.
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 uses the verb 'Fetch' and a specific resource 'aggregate business metrics' across multiple entities, clearly distinguishing it from sibling tools that target individual entities like users or orders.
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 implies use for high-level overviews but does not specify when to choose this over sibling tools like get_orders or get_user_business_profile, nor does it mention any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indian_usersGet Indian UsersA
Fetch all Indian test users. Use this for customer segmentation, location analysis, plan analysis, and profile lookup.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It only says 'Fetch' but does not disclose any behavioral aspects like authentication needs, rate limits, or whether it returns a complete list or paginated results. For a simple read-only tool, this is minimally adequate but lacks depth.
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 one sentence, front-loading the core action and resource, then adding use-case examples. Every word is meaningful with no redundancy.
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 the tool has no parameters and no output schema, the description sufficiently covers its purpose and usage context. It could be improved by noting the output format or any limitations, but it is complete enough for a simple list-fetch operation.
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 tool has zero parameters, so the baseline is 4. The description adds value by specifying 'all Indian test users', confirming the lack of filtering. This aligns with the empty schema and provides clarity beyond the raw 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?
The description clearly states the action ('Fetch') and the specific resource ('all Indian test users'), which immediately distinguishes it from sibling tools like get_orders (orders) or get_user_business_profile (single user profile).
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 lists use cases (customer segmentation, location analysis, plan analysis, profile lookup), providing clear context for when to use this tool. However, it does not explicitly state when not to use it or contrast with alternatives like get_user_orders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ordersGet OrdersA
Fetch all business orders. Use this for revenue, product category, delivery, payment, and risk analysis.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states 'Fetch all business orders' without disclosing potential performance impacts, pagination, or data freshness. Lacks behavioral details.
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?
Single sentence with no redundant words. Front-loaded with action and resource, followed by usage guidance. Efficient.
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?
Adequate for a simple fetch-all tool with no parameters or output schema, but lacks behavioral details (e.g., ordering, limits) that would improve completeness given no annotations.
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?
Zero parameters, so schema coverage is 100% trivially. Description adds no parameter-specific info but highlights purpose, meeting baseline for no-param tools.
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?
Description clearly states verb 'Fetch' and resource 'all business orders', distinguishing from sibling tools like get_user_orders by scope and use cases.
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?
Lists specific analyses (revenue, product category, etc.) for which this tool is suitable, but does not explicitly state when not to use it or mention alternatives like get_user_orders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_business_profileGet User Business ProfileA
Fetch one user with their subscription, orders, invoices, payments, refunds, and business metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User ID, such as usr_001. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It uses 'Fetch' suggesting a read-only operation but does not confirm non-destructiveness, error behavior (e.g., if user not found), authentication requirements, or performance implications.
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 concise sentence that includes the verb, resource, and a list of included data. Every word earns its place, with no redundant information.
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 no output schema, the description fairly comprehensively lists the data returned (subscription, orders, invoices, etc.). However, it lacks details on pagination, nesting, or whether all data is always present. Still, for a single-user fetch, it is mostly complete.
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 single parameter 'userId' has a description in the schema ('User ID, such as usr_001.'), giving 100% schema coverage. The tool description does not add additional meaning beyond what the schema provides, 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 clearly states the verb 'Fetch' and the resource 'one user', listing the included data: subscription, orders, invoices, payments, refunds, and business metrics. It distinguishes from sibling tools like 'get_indian_users' (geographically filtered) and 'get_orders' (orders only).
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 implies usage for fetching a full business profile but does not explicitly state when to use it versus siblings (e.g., 'get_business_summary' for a summary). No when-not-to-use or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_ordersGet User OrdersC
Fetch all orders for a single user, such as usr_001.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User ID, such as usr_001. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, yet the description only states it fetches orders. It omits behavioral traits such as pagination, ordering, read-only nature, or authentication requirements. This leaves significant gaps for an agent.
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. It is efficiently front-loaded, but could include more context without becoming verbose.
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 simple list tool with one parameter and no output schema, the description is minimally complete. However, missing details like response format or pagination limit its utility. Could be improved with brief behavioral info.
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 coverage is 100% (parameter 'userId' described as 'User ID, such as usr_001'). The description adds no extra semantic meaning beyond the schema example. Baseline 3 applies as 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 action ('Fetch all orders') and the specific resource ('for a single user'). It distinguishes from sibling tools like 'get_orders' by limiting scope to one user. However, it does not explicitly frame this in contrast to alternatives.
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?
No guidance is given on when or when not to use this tool. It does not mention alternatives or exclude cases like needing orders for multiple users. The implication is weak and relies on sibling names.
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. Dates show when Glama detected each change.
5 tool updates
v1.0.0- First observed
get_business_summary - First observed
get_indian_users - First observed
get_orders - First observed
get_user_business_profile - First observed
get_user_orders
TDQS
Tools are mostly distinct: one for Indian users, one for all orders, one for user-specific orders, one for full user profile, and one for aggregate summary. Some overlap exists between get_orders and get_user_orders, but names clarify scope. get_user_business_profile includes user info, overlapping with get_indian_users but with different granularity.
All tools follow a consistent 'get_<noun>' pattern using snake_case. The nouns are descriptive and the pattern is uniform, making it easy to predict tool behavior from names.
With 5 tools, the server is well-scoped for a proof-of-concept. It covers key data access patterns without unnecessary bloat, balancing coverage and simplicity.
The tool set is read-only, missing create/update/delete operations. It lacks a tool to fetch a single order by ID or a simple user lookup without full profile. For a POC, these gaps may be acceptable, but the surface feels incomplete for production use.
Maintenance
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
Unified MCP server for 70+ eCommerce platforms: products, orders, customers, and more.
Unified.to MCP server — one API for 500+ B2B SaaS integrations across 28+ categories
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn API-only MCP server for Blinkit that enables automated shopping on the Indian quick-commerce platform, supporting login, search, cart, checkout, and payment via UPI.251MIT
- AlicenseAqualityAmaintenanceA token-optimized MCP server that enables AI agents to manage Flipkart Seller operations including order fulfillment, inventory, returns, ad campaigns, and financial settlements via the Flipkart v3 API.5121MIT
- FlicenseAqualityCmaintenanceMCP server for deploying projects to multiple cloud platforms (Vercel, Railway, Neon, MongoDB Atlas, Docker) and running local dev servers, with orchestration for full-stack deployments.8-
- FlicenseNot gradedqualityCmaintenanceMCP server for Akij Resource Digital Management team providing KPI summaries and utility tools (time, echo, calculation) over Streamable HTTP, deployable to Vercel.-
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/AyushSrivastava0609/dokaai-mcp-server-poc'
If you have feedback or need assistance with the MCP directory API, please join our Discord server