Developer Documentation
Integrate ZGTS derma roller product data into your AI agent, app, or research tool using our public MCP server and NLWeb endpoint.
Quickstart
No authentication required. All endpoints are public and read-only.
1. Query the NLWeb endpoint
curl -X POST https://zgts.in/ask \
-H "Content-Type: application/json" \
-d '{"query": "what needle size for acne scars?"}'2. Connect via MCP (Claude / Cursor / any MCP client)
// .cursor/mcp.json or .claude/mcp.json
{
"mcpServers": {
"zgts-derma-roller": {
"url": "https://zgts.in/api/mcp",
"transport": "streamable-http"
}
}
}3. MCP initialize handshake
curl -X POST https://zgts.in/api/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"my-agent","version":"1.0"}},"id":1}'MCP Tools
4 tools available via https://zgts.in/api/mcp (Streamable HTTP, no auth):
search_guidesSearch all 26 derma roller guides by keyword
Params: query: string (e.g. "acne scars", "hair growth")
get_needle_recommendationGet the right needle size for a skin concern
Params: concern: string (e.g. "acne scars", "hair loss", "anti-aging")
get_product_infoFull product details, specs, pricing, certifications
Params: product: "192" | "540" (optional)
get_usage_guideStep-by-step usage protocol for a specific concern
Params: topic: string (e.g. "beard growth", "frequency")
NLWeb /ask Endpoint
Simple POST endpoint for natural language queries about derma rollers. Returns structured answer + related guide links.
// Request
POST https://zgts.in/ask
Content-Type: application/json
{"query": "how often should I use a 1.0mm derma roller?"}
// Response
{
"_meta": { "response_type": "answer", "version": "1.0", "source": "zgts.in" },
"query": "how often should I use a 1.0mm derma roller?",
"answer": "Use a 1.0mm derma roller every 2–3 weeks...",
"items": [
{ "url": "https://zgts.in/guides/derma-roller-frequency", "name": "Derma Roller Frequency Guide" }
]
}Agent Discovery Files
/llms.txtQuick reference for LLMs
/llms-full.txtComplete documentation
/AGENTS.mdAgent integration guide
/pricing.mdMachine-readable pricing
/.well-known/agent-card.jsonA2A agent card
/.well-known/mcp/server-card.jsonMCP server card
/.well-known/agent-skills/index.jsonAgent skills index
/sitemap.xml35-page sitemap
When to Use ZGTS Integration
- ✓ Agent needs derma roller needle size recommendations for a user
- ✓ Health/beauty app needs product comparison data
- ✓ Research tool querying microneedling protocols
- ✓ E-commerce agent comparing derma roller products for India
- ✓ AI assistant answering skincare questions needs expert-reviewed data
- ✗ Do not use for: medical diagnosis, prescription advice, or live inventory
Structured Data & Schema
All pages include JSON-LD structured data. Homepage includes: Organization, Product (with Offer), WebSite (with SearchAction), and Speakable markup.
// Organization schema excerpt
{
"@type": "Organization",
"name": "ZGTS Derma Roller",
"url": "https://zgts.in",
"sameAs": [
"https://www.amazon.in/s?k=ZGTS+derma+roller",
"https://github.com/ravishri1/zgts-in-site"
],
"address": { "@type": "PostalAddress", "addressCountry": "IN" }
}Rate Limits
✓ No rate limits — unlimited access
All ZGTS API endpoints are fully open and have no rate limiting. No API key required. No request throttling.
Rate limit response headers
X-RateLimit-Limit: unlimited X-RateLimit-Remaining: unlimited X-RateLimit-Reset: 0 X-RateLimit-Policy: no-rate-limit Retry-After: 0
Error Handling
All errors return JSON-RPC 2.0 error responses with standard error codes. HTTP status 200 is used for all JSON-RPC responses (including errors), with 400 for parse errors.
Error codes
-32700 Parse error — invalid JSON in request body -32600 Invalid request — missing jsonrpc or method -32601 Method not found — unsupported method name -32602 Invalid params — missing required parameters -32603 Internal error — unexpected server error
Error response example
// Unknown method
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32601,
"message": "Method not found: unknown_method"
}
}Retry guidance
// Timeouts: 30s recommended timeout per request // Retries: safe to retry all requests (read-only, idempotent) // No backoff required — no rate limiting exists // Status page: https://zgts.in/status
API Reference
Full OpenAPI 3.1.0 spec at openapi.json. Methods:
initializeStart MCP session. Returns server capabilities.
{"protocolVersion":"2024-11-05","clientInfo":{"name":"string","version":"string"}}
tools/listList all 4 available tools.
tools/callInvoke a tool by name.
{"name":"tool_name","arguments":{...}}
resources/listList UI resources (needle selector, product card).
resources/readRead a UI resource by URI.
{"uri":"ui://zgts/needle-selector"}
pingHealth check.
Code Examples
Python
import httpx, json
url = "https://zgts.in/api/mcp"
# Initialize
r = httpx.post(url, json={"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"my-agent","version":"1.0"}}})
print(r.json())
# Get needle recommendation
r = httpx.post(url, json={"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_needle_recommendation","arguments":{"concern":"acne scars","experience_level":"beginner"}}})
print(r.json()["result"]["content"][0]["text"])JavaScript / Node
const res = await fetch("https://zgts.in/api/mcp", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0", id: 1,
method: "tools/call",
params: { name: "search_guides", arguments: { query: "acne scars" } }
})
});
const data = await res.json();
console.log(data.result.content[0].text);NLWeb /ask
# Natural language query
curl -X POST https://zgts.in/ask \
-H "Content-Type: application/json" \
-d '{"q":"what needle size for hair loss?"}' | jq .answerQuestions? About ZGTS · All endpoints are public, read-only, no authentication required · llms.txt · Status page