Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
6,000+ web scrapers for your AI agent, start free logo6,000+ web scrapers for your AI agent, start free

Apify gives your agent live web data: 6,000+ prebuilt scrapers and actors, MCP-ready. Sign up free with $5 in usage credits.

Try Apify free
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 48,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

Provides read-only tools to interact with CAS genesisWorld CRM, enabling smart search, data object retrieval, dossier access, and type discovery via MCP.

README.md

<p align="center"> <img src="https://www.acp-gruppe.com/hs-fs/hubfs/cas_genesis_world-1.png?width=1600&height=600&name=cas_genesis_world-1.png" alt="CAS genesisWorld" width="100%" /> </p>

cas-genesisworld-mcp

![npm](https://www.npmjs.com/package/cas-genesis-world-mcp) ![Docker](https://hub.docker.com/r/vaatu/cas-genesis-world-mcp) ![CI](https://github.com/Gnidreve/Genesis-World-MCP/actions/workflows/ci.yml) ![License: MIT](./LICENSE)

Connect Claude, Cursor, or any MCP-compatible AI agent to your CAS genesisWorld CRM. Search contacts, manage tasks and appointments, and read or write records — through natural language, without writing a single API call.

  • 69 tools, including 7 native flows that bundle multi-step CRM

operations (like checking for scheduling conflicts before booking a meeting, or checking for duplicates before creating a contact) into a single call.

  • Full read/write access to tasks, contacts, appointments, documents,

distribution lists, and more — plus generic access to any custom object type your installation defines.

  • Read-only mode available for safe, exploratory use.
  • Ships as a ready-made Docker image or npm package.

Quick start

Add this to your MCP client's config (e.g. Claude Desktop's claude_desktop_config.json):

{
  "mcpServers": {
    "cas-genesisworld": {
      "command": "npx",
      "args": ["-y", "cas-genesis-world-mcp"],
      "env": {
        "GENESISWORLD_BASE_URL": "http://your-genesisworld-server/genesisrest.svc",
        "GENESISWORLD_PRODUCT_KEY": "your-product-key",
        "GENESISWORLD_USERNAME": "your-username",
        "GENESISWORLD_PASSWORD": "your-password"
      }
    }
  }
}

Restart your client — the tools show up automatically. Ask your agent to find a contact, list your open tasks, or book a meeting, and it takes it from there.

Prefer a persistent, self-hosted server instead of a per-client process? See Self-hosting with Docker below.

What you can ask it

Once connected, your agent can handle requests like:

  • "Find the contact info for Jane Doe and show me her open tasks."
  • "Create a follow-up task for this lead and link it to their contact record."
  • *"Book a meeting with the sales team next Tuesday at 10am — check everyone's

calendar for conflicts first."*

  • "Check for possible duplicates before creating a new contact for Acme Corp."
  • "Generate a report for this opportunity."

Requests like these are answered by flows — single tool calls that bundle the multi-step sequence of API requests a human would otherwise have to script by hand.

Tools & flows

Flows — compound actions, one call each

| Flow | Mode | What it does | |-----------------|-------|--------------| | my_open_tasks | read | Current user + their task list (due window, saved view, or full-text filter) in one call | | task_overview | read | Task record + links + tags, fetched in parallel | | create_task | write | Create a task and optionally link it to another object (e.g. a contact) | | find_contact | read | Contact search by name and/or phone number, in parallel | | contact_360 | read | Contact + collection dossier + tags + links, fetched in parallel | | create_address_safe | write | Duplicate check first — creates only when no candidates are found | | create_appointment_safe | write | Optional conflict check → create → add participants, in one call |

<details> <summary><strong>Full tool reference (62 atomic tools)</strong></summary>

Read (39)

| Tool | Endpoint | |-------------------------------------|-------------------------------------------------------------------| | smart_search | GET /v7.0/smartsearch | | get_data_object | GET /v7.0/type/{dataObjectType}/{dataObjectGGUID} | | get_dossier | GET /v7.0/type/{dataObjectType}/{dataObjectGGUID}/dossier/full | | list_data_objects | GET /v7.0/type/{dataObjectType}/list | | list_views | GET /v7.0/type/{dataObjectType}/view/list | | list_data_objects_by_view | GET /v7.0/type/{dataObjectType}/view/{viewID}/list | | list_available_data_object_types | GET /v7.0/user/self/dataobjecttypepermission/list | | get_data_object_types_metadata | GET /v7.0/metadata | | list_links | GET /v7.0/type/{dataObjectType}/{dataObjectGGUID}/link/list | | list_recent_data_objects | GET /v7.0/type/{dataObjectType}/recent/list | | get_available_products | GET /v7.0/type/gwopportunity/availableproducts | | get_data_object_count | GET /v7.0/type/{dataObjectType}/count | | get_primary_link_parents | GET /v7.0/type/{dataObjectType}/{dataObjectGGUID}/primarylinkparents | | list_users | GET /v7.0/user/list | | get_user_self | GET /v7.0/user/self | | get_view | GET /v7.0/type/{dataObjectType}/view/{viewID} | | list_tags | GET /v7.0/tags | | get_object_tags | GET /v7.0/type/{dataObjectType}/{dataObjectGGUID}/tags | | get_full_data_objects | GET /v7.0/type/{dataObjectType}/full | | list_data_objects_by_view_full | GET /v7.0/type/{dataObjectType}/view/{viewID}/full | | get_data_objects_bulk | POST /v7.0/type/{dataObjectType}/records (read despite POST) | | get_ticket_service_agreements | GET /v7.0/type/task/ticket/serviceagreements | | get_vcard | GET /v7.0/type/address/{dataObjectGGUID}/vcard | | get_salutation | POST /v7.0/type/address/salutation (read despite POST) | | format_phone_number | POST /v7.0/type/address/formatphonenumber (read despite POST) | | check_appointment_conflicts | GET /v7.0/type/appointment/conflicts | | get_participant_summary | GET /v7.0/type/appointment/{gguid}/participant/summary | | list_appointment_participants | GET /v7.0/type/appointment/{gguid}/participant/full | | get_document_file | GET /v7.0/type/document/{gguid}/file (never locks) | | list_document_versions | GET /v7.0/type/document/{gguid}/file/version/list | | list_email_attachments | GET /v7.0/type/emailstore/{gguid}/attachment/list | | get_email_attachment | GET /v7.0/type/emailstore/{gguid}/attachment/{attachmentId} | | get_email_file | GET /v7.0/type/emailstore/{gguid}/file | | list_object_permissions | GET /v7.0/type/{t}/{gguid}/permission/full | | list_distributions | GET /v7.0/type/gwdistribution/list | | list_distribution_addresses | GET /v7.0/type/gwdistribution/{distributionGuid}/address/list | | list_report_templates | GET /v7.0/type/report/template/{templateType} | | generate_report | POST /v7.0/type/report/template/{templateGGUID} (read despite POST — renders, doesn't mutate) | | readme (tool form) | server-local static orientation document |

Write (23 — hidden in read-only mode, along with the write flows above)

| Tool | Endpoint | |-------------------------|------------------------------------------------------------------------| | create_data_object | POST /v7.0/type/{dataObjectType} | | update_data_object | PUT /v7.0/type/{dataObjectType}/{dataObjectGGUID} | | delete_data_object | DELETE /v7.0/type/{dataObjectType}/{dataObjectGGUID} | | restore_data_object | POST /v7.0/type/{dataObjectType}/rbin/undelete | | create_link | POST /v7.0/type/{dataObjectType}/{dataObjectGGUID}/link | | delete_link | DELETE /v7.0/type/{t}/{gguid}/link/{objecttype2}/{guid2}/{attribute} | | set_object_tags | POST /v7.0/type/{dataObjectType}/{dataObjectGGUID}/tags/user | | append_notes | POST /v7.0/type/{t}/{gguid}/notes/{fieldName} | | create_dossier_entry | POST /v7.0/type/{dataObjectType}/{dataObjectGGUID}/dossier | | delete_dossier_entry | DELETE /v7.0/type/{t}/{gguid}/dossier/{dossierEntryGGUID} | | set_contact_persons_active | POST /v7.0/type/address/{gguid}/contactperson/activate\|deactivate | | add_appointment_participant | POST /v7.0/type/appointment/{gguid}/participant | | remove_appointment_participant | DELETE /v7.0/type/appointment/{gguid}/participant/{participantGGUID} | | set_recurrence | POST /v7.0/type/{t}/recurrence / PUT …/recurrence/{periodGuid} | | delete_recurrence | DELETE /v7.0/type/{t}/recurrence/{periodGuid} | | set_alarm | PUT /v7.0/type/{t}/{gguid}/alarm/self | | delete_alarm | DELETE /v7.0/type/{t}/{gguid}/alarm/self | | set_object_permission | POST /v7.0/type/{t}/{gguid}/permission | | delete_object_permission | DELETE /v7.0/type/{t}/{gguid}/permission/{permissionGGUID} | | add_distribution_addresses | POST /v7.0/type/gwdistribution/{distributionGuid}/address | | remove_distribution_address | DELETE /v7.0/type/gwdistribution/{distributionGuid}/address/{addressGGUID} | | convert_lead | POST /v7.0/type/gwsllead/{dataObjectGGUID}/convert | | recalculate_opportunity_positions | PUT /v7.0/type/gwopportunitypos/recalculatevalues |

The full upstream API this is built on is committed as swagger.json.

</details>

Resources

Beyond tools, the server exposes MCP resources for data that rarely changes, so your agent doesn't burn tool calls rediscovering it every session:

  • genesisworld://readme — static orientation document for the agent

itself (domain model, navigation patterns, efficiency rules).

  • genesisworld://types — data-object types accessible to the user, with

permissions. Cached 15 min.

  • genesisworld://metadata/{objectType} — field/relationship schema of one

type, e.g. genesisworld://metadata/ADDRESS. Cached 15 min.

  • genesisworld://views/{objectType} — saved views of one type, e.g.

genesisworld://views/TASK. Cached 15 min.

Self-hosting with Docker

For a persistent server multiple clients can point at (instead of one npx process per client):

docker run -d --name cas-genesisworld-mcp -p 8084:3000 \
  -e GENESISWORLD_BASE_URL="http://your-genesisworld-server/genesisrest.svc" \
  -e GENESISWORLD_PRODUCT_KEY="your-product-key" \
  -e GENESISWORLD_USERNAME="your-username" \
  -e GENESISWORLD_PASSWORD="your-password" \
  vaatu/cas-genesis-world-mcp

# Read-only mode: append --read-only after the image name
docker run -d --name cas-genesisworld-mcp -p 8084:3000 \
  -e GENESISWORLD_BASE_URL="http://your-genesisworld-server/genesisrest.svc" \
  -e GENESISWORLD_PRODUCT_KEY="your-product-key" \
  -e GENESISWORLD_USERNAME="your-username" \
  -e GENESISWORLD_PASSWORD="your-password" \
  vaatu/cas-genesis-world-mcp --read-only

The MCP endpoint is now at http://localhost:8084/mcp. Point your client at it:

{
  "mcpServers": {
    "cas-genesisworld": {
      "url": "http://localhost:8084/mcp"
    }
  }
}

Configuration

Two kinds of settings, kept strictly separate — no setting is both: Environments configure the deployment (where the API lives, who connects); launch options toggle behavior at startup.

Environments

| Variable | Required | Purpose | | --------------------------- | -------- | ------------------------------------------------ | | GENESISWORLD_BASE_URL | yes | Base URL of the REST service, e.g. http://demo.cas.de/genesisrest.svc | | GENESISWORLD_PRODUCT_KEY | yes | Sent as X-CAS-PRODUCT-KEY on every request | | GENESISWORLD_USERNAME | yes\ | Basic Auth user | | GENESISWORLD_PASSWORD | yes\ | Basic Auth password | | MCP_TRANSPORT | no | http (default in Docker) or stdio | | MCP_HOST / MCP_PORT | no | Bind address for HTTP mode (default 0.0.0.0:3000) | | GENESISWORLD_MAX_RESULT_CHARS | no | Truncate oversized responses (default 60000 chars; 0 disables) | | GENESISWORLD_QUIET | no | true disables per-request stderr logging |

\* Required in practice for any real request to succeed.

Launch options

| Flag | Required | Purpose | | ------------- | -------- | ------------------------------------------------ | | --read-only | no | Registers only read tools for that session — mutating tools are not merely blocked, they don't exist |

Pass launch options on the command line, or after the image name in docker run (as shown above). None of them have an environment-variable equivalent, by design.

License

MIT

---

Want to add a tool or understand how this is built? See AGENTS.md for architecture and contributor docs, and ROADMAP.md for the project plan.

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Search servers.