Skip to main content
Glama
ALSO Cloud Marketplace MCP Server

ALSO Cloud Marketplace MCP Server

by pitwch

ALSO Cloud Marketplace MCP

MCP-Server für die ALSO Cloud Marketplace Simple API — damit KI-Assistenten (Cursor, Claude, Gemini CLI, OpenAI Codex, …) direkt auf Companies, Subscriptions, Users, Invoices usw. zugreifen können.

Protokoll

Model Context Protocol (stdio)

API

MarketplaceSimpleAPI 1.0.0

Stack

TypeScript / Node.js 20+

SDK-Library

go-also-cloud-wrapper (gleiche Auth & Marketplaces)


Schnellstart

git clone https://github.com/pitwch/also-cloud-marketplace-mcp.git
cd also-cloud-marketplace-mcp
npm install
npm run build

Benötigte Umgebungsvariablen:

Variable

Beispiel

Pflicht

ALSO_CLOUD_MARKETPLACE

Switzerland oder https://marketplace.also.ch

ja

ALSO_CLOUDUSER

you@example.com

ja

ALSO_CLOUDPW

••••••••

ja

ALSO_CLOUD_TIMEOUT_MS

30000

nein

ALSO_CLOUD_API_PREFIX

/SimpleAPI/.../rest

nein

ALSO_CLOUD_PARENT_ACCOUNT_ID

315818

nein (Default-Parent für Namenssuche)

ALSO_CLOUD_MARKETPLACE akzeptiert eine volle URL oder einen Country-Key:
Switzerland, Germany, Austria, Debug, …

Hinweis: 2FA

ALSO Cloud Marketplace-Accounts haben standardmässig 2FA aktiviert. Die Simple API und dieses MCP unterstützen nur Login mit Benutzername und Passwort — 2FA funktioniert damit nicht. Für die API-/MCP-Nutzung muss 2FA für den betreffenden Account über das ALSO Supportportal deaktiviert werden (Support-Anfrage).


Related MCP server: SMB AI Command Platform MCP Server

Installation in Clients

Überall gilt: Server lokal starten (stdio), Credentials als env setzen.
Pfad unten durch deinen Clone ersetzen, z. B. C:/DEV/also-cloud-marketplace-mcp oder /home/you/also-cloud-marketplace-mcp.

Empfohlene Variante (gebaut)

command: node
args:    [<REPO>/dist/index.js]

Alternative (ohne Build, via tsx)

command: npx
args:    [tsx, <REPO>/src/index.ts]

Voraussetzung: zuvor npm install im Repo.


Cursor

  1. Settings → MCP → Add new MCP server (oder mcp.json bearbeiten).

  2. Eintrag hinzufügen:

{
  "mcpServers": {
    "also-cloud": {
      "command": "node",
      "args": ["C:/DEV/also-cloud-marketplace-mcp/dist/index.js"],
      "env": {
        "ALSO_CLOUD_MARKETPLACE": "Switzerland",
        "ALSO_CLOUDUSER": "you@example.com",
        "ALSO_CLOUDPW": "your-password"
      }
    }
  }
}
  1. Server aktivieren / Cursor neu laden.

  2. Im Chat Tools von also-cloud nutzen, z. B. „Liste Companies unter Parent 12345“.


Claude Desktop

  1. Config öffnen: Settings → Developer → Edit Config

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

  2. Gleichen mcpServers-Block wie bei Cursor einfügen.

  3. Claude Desktop vollständig neu starten.

  4. Im Chat das Hammer-/Tools-Icon prüfen — also-cloud sollte erscheinen.


Claude Code (CLI)

claude mcp add also-cloud --env ALSO_CLOUD_MARKETPLACE=Switzerland --env ALSO_CLOUDUSER=you@example.com --env ALSO_CLOUDPW=secret -- node /path/to/also-cloud-marketplace-mcp/dist/index.js

Prüfen:

claude mcp list

Gemini CLI

Config in ~/.gemini/settings.json (oder projektbezogen .gemini/settings.json):

{
  "mcpServers": {
    "also-cloud": {
      "command": "node",
      "args": ["/path/to/also-cloud-marketplace-mcp/dist/index.js"],
      "env": {
        "ALSO_CLOUD_MARKETPLACE": "Switzerland",
        "ALSO_CLOUDUSER": "you@example.com",
        "ALSO_CLOUDPW": "your-password"
      }
    }
  }
}

Oder per CLI:

gemini mcp add also-cloud --env ALSO_CLOUD_MARKETPLACE=Switzerland --env ALSO_CLOUDUSER=you@example.com --env ALSO_CLOUDPW=secret -- node /path/to/also-cloud-marketplace-mcp/dist/index.js

Docs: MCP servers with Gemini CLI


OpenAI — Codex CLI / ChatGPT Desktop / IDE

Codex nutzt TOML (~/.codex/config.toml), geteilt mit ChatGPT Desktop & Codex-IDE:

[mcp_servers.also-cloud]
command = "node"
args = ["/path/to/also-cloud-marketplace-mcp/dist/index.js"]

[mcp_servers.also-cloud.env]
ALSO_CLOUD_MARKETPLACE = "Switzerland"
ALSO_CLOUDUSER = "you@example.com"
ALSO_CLOUDPW = "your-password"

Oder:

codex mcp add also-cloud \
  --env ALSO_CLOUD_MARKETPLACE=Switzerland \
  --env ALSO_CLOUDUSER=you@example.com \
  --env ALSO_CLOUDPW=secret \
  -- node /path/to/also-cloud-marketplace-mcp/dist/index.js

codex mcp list

In der TUI: /mcp zeigt verbundene Server.

ChatGPT im Browser: lokales stdio geht hier nicht nativ — siehe unten Browser (MCP SuperAssistant). Für natives MCP: Codex CLI / ChatGPT Desktop.

Docs: OpenAI MCP / Codex


VS Code (GitHub Copilot / MCP)

Je nach Extension analog Cursor: MCP-Server mit command/args/env eintragen.
Pfad auf dist/index.js zeigen und Credentials setzen.


Browser (ChatGPT, Gemini, Perplexity, …) — MCP SuperAssistant

Für Web-Clients ohne natives lokales MCP (z. B. ChatGPT, Gemini, Perplexity, Grok, Google AI Studio) eignet sich MCP SuperAssistant (Browser-Extension + lokaler Proxy).

  1. Extension installieren: Chrome Web Store (auch Firefox / Chromium-Browser). Docs: Installation.

  2. config.json anlegen (gleicher also-cloud-Block wie bei Cursor):

{
  "mcpServers": {
    "also-cloud": {
      "command": "node",
      "args": ["C:/DEV/also-cloud-marketplace-mcp/dist/index.js"],
      "env": {
        "ALSO_CLOUD_MARKETPLACE": "Switzerland",
        "ALSO_CLOUDUSER": "you@example.com",
        "ALSO_CLOUDPW": "your-password"
      }
    }
  }
}

Alternativ eine bestehende Cursor-/Claude-Config nutzen.

  1. Proxy starten (im Terminal, Repo oder Ordner mit der Config):

npx -y @srbhptl39/mcp-superassistant-proxy@latest --config ./config.json --outputTransport sse

Default-URL: http://localhost:3006/sse

  1. ChatGPT / Gemini / … öffnen → MCP-Sidebar → Server-Status → Connect auf http://localhost:3006/sse → MCP-Instructions-Prompt per Insert oder Attach in den Chat legen → Tools nutzen.


Verwendung (Beispiele)

Nach der Anbindung kannst du natürlichsprachlich fragen:

  • „Welche Subscriptions hat die Demo AG aktiv?“ → list_company_subscriptions (companyName, ggf. parentAccountId / Env)

  • „Alle Azure-/VM-Subscriptions / Optimierung RI“ → list_azure_subscriptions

  • „Finde Company Demo“ → find_companies

  • „Zeig Companies unter Parent 523525“ → get_companies

  • „Latest Invoices für März 2026“ → get_latest_invoices_for_period

  • „Lege einen User unter Company X an“ → create_user (Write)

Tipp: Für Firmen-/Abo-Fragen nicht über Reports oder Marketplaces gehen — die Workflow-Tools sind dafür da. Subscription-Tools liefern standardmässig kompakte Antworten; Rohdaten nur mit fullDetail=true. Für Gemini CLI siehe GEMINI.md (nach MCP-Update CLI neu starten).

Discovery aller API-Endpoints: Tool list_api_endpoints.


Tools (Überblick)

~58 Tools. Vollständige Liste inkl. Risiko-Flags: Tool list_api_endpoints.

Empfohlene Workflows

Tool

Zweck

find_companies

Firma nach Name unter Parent suchen

list_company_subscriptions

Aktive/kompakte Subscriptions einer Firma (Name oder Account-ID)

list_azure_subscriptions

Azure Plan / RI / Savings Plan über alle Endkunden (Portfolio)

Session & Meta

Tool

Zweck

list_marketplaces

Country-Keys → Base-URLs (ohne Login)

list_api_endpoints

Katalog der Simple-API

validate_session / clear_session

Session prüfen / verwerfen

api_request

Escape Hatch (u. a. destruktive Endpoints)

Lesen

Bereich

Tools

Company / Reseller / Dept / User

get_*, get_*_by_vat_id, Listen

Subscriptions

get_subscription(s) (compact; fullDetail opt-in), get_subscription_with_addons, get_possible_services_for_parent

Catalog

get_owned_marketplaces, list_marketplace_services, get_available_services_for_marketplace, get_service_information

Billing

get_reports, execute_report, get_latest_invoices*, get_preview_invoices, get_invoice_aggregation_report

Sonst

get_credit_limit, get_security_roles, get_special_deal

Schreiben (gezielt freigeschaltet)

Bereich

Tools

Accounts

create_* / update_* für Company, Reseller, Department, User

Subscriptions

get_fields_for_service, validate_subscription_fields, create_subscription, update_subscription

Actions

get_account_custom_actions, execute_account_custom_action, retry_last_failed_provisioning

Upgrade / Renew

get_possible_services_for_upgrade, get_subscription_fields_for_*, execute_subscription_upgrade, configure_subscription_renew, reset_default_renew_values

Credit / Deal

set_credit_limit, list_credit_check_orders_for_approval, approve_* / decline_credit_check_order, set_special_deal

Nur über api_request (destruktiv / selten)

TerminateAccount, DeleteMarketplace*, DeleteSpecialDeal, Marketplace-Create/Delete, …
→ bewusst kein eigenes Tool, damit die KI sie nicht versehentlich aufruft.


Entwicklung

npm run dev        # stdio via tsx
npm run typecheck
npm run build
npm start          # node dist/index.js

Wichtig: Auf stdout nur MCP-JSON-RPC schreiben — Logs nur mit console.error.


License

MIT © Pedrett IT+Web AG

Available Tools

60 tools
api_requestAPI requestA

Generic authenticated Simple API call. Prefer dedicated tools when available. Use this for destructive ops (TerminateAccount, DeleteMarketplace*, DeleteSpecialDeal) and rare endpoints. ALSO Simple API is POST-only for almost all operations.

Inputs: endpoint (required), body, query, method.

approve_credit_check_orderApprove credit check orderA

WRITE: ApproveCreditCheckOrder. Pass the order object (typically from list_credit_check_orders_for_approval), usually including RequestId and Comment.

Inputs: order (required).

clear_sessionClear sessionA

Drop the cached session token (forces fresh login on next call).

Inputs: no named parameters.

configure_subscription_renewConfigure subscription renewB

WRITE: ConfigureSubscriptionRenew — stores renew field values applied at subscription end date.

Inputs: accountId (required), fieldValues (required).

create_companyCreate companyB

WRITE: CreateCompany. Pass companyAccount object (parent, name, address, … per Simple API). Prefer get_companies afterwards to verify.

Inputs: companyAccount (required).

create_departmentCreate departmentC

WRITE: CreateDepartment. Pass departmentAccount object.

Inputs: departmentAccount (required).

create_resellerCreate resellerC

WRITE: CreateReseller. Pass resellerAccount object.

Inputs: resellerAccount (required).

create_subscriptionCreate subscriptionC

WRITE: CreateSubscription. Use get_fields_for_service + validate_subscription_fields first.

Inputs: subscriptionAccount (required).

create_userCreate userC

WRITE: CreateUser under selected parent. Pass userAccount object.

Inputs: userAccount (required).

decline_credit_check_orderDecline credit check orderB

WRITE: DeclineCreditCheckOrder. Pass the order object (typically from list_credit_check_orders_for_approval).

Inputs: order (required).

execute_account_custom_actionExecute account custom actionC

WRITE: ExecuteAccountCustomAction — runs a named custom action on a subscription.

Inputs: action (required), subscriptionAccount (required).

execute_reportExecute reportC

ExecuteReport — run a named report with parameters.

Inputs: reportName (required), columns, parameters.

execute_subscription_upgradeExecute subscription upgradeC

WRITE: ExecuteSubscriptionUpgrade — provisions upgrade to targetProductName.

Inputs: fieldValues (required), sourceAccountId (required), targetProductName (required), targetAccountId, +1 more.

find_companiesFind companies by nameA
Read-only

PREFERRED for locating a company by name. Calls GetCompanies under parentAccountId (or ALSO_CLOUD_PARENT_ACCOUNT_ID) and filters by CompanyName. Do NOT use get_reports / execute_report to search companies.

Inputs: name (required), parentAccountId.

get_account_custom_actionsGet account custom actionsC
Read-only

GetAccountCustomActionsWithFields — list custom actions for a subscription.

Inputs: accountId (required).

get_available_services_for_marketplaceGet available marketplace servicesD

GetAvailableServicesForMarketplace.

Inputs: marketplaceId (required), filters.

get_companiesGet companiesA

GetCompanies — all first-level companies under parentAccountId. To search by name prefer find_companies.

Inputs: parentAccountId (required).

get_companyGet companyC

GetCompany — company by accountId.

Inputs: accountId (required).

get_company_by_vat_idGet company by VAT IDD

GetCompanyByVatId.

Inputs: vatId (required).

get_credit_limitGet credit limitC

GetCreditLimit for company accountId.

Inputs: accountId (required).

get_departmentGet departmentC

GetDepartment — department by accountId.

Inputs: accountId (required).

get_departmentsGet departmentsC

GetDepartments — departments under parentAccountId.

Inputs: parentAccountId (required).

get_fields_for_serviceGet fields for serviceA
Read-only

GetFieldsForService — field definitions needed before CreateSubscription / ValidateFields.

Inputs: productName (required), parentAccountId (required), secondaryParentId.

get_invoice_aggregation_reportGet invoice aggregation reportD

GetInvoiceAggregationReport for year/month.

Inputs: year, month, resellerContext.

get_latest_invoicesGet latest invoicesC

GetLatestInvoices for the authenticated account.

Inputs: resellerContext, groupByDepartments.

get_latest_invoices_for_periodGet invoices for periodD

GetLatestInvoicesForPeriod — invoices for year/month.

Inputs: year (required), month (required), resellerContext, groupByDepartments.

get_owned_marketplacesGet owned marketplacesB

GetMarketplaces — marketplaces owned by the company (API).

Inputs: no named parameters.

get_possible_services_for_parentGet possible services for parentC

GetPossibleServicesForParent — services a parent can subscribe to.

Inputs: parentAccountId (required).

get_possible_services_for_upgradeGet possible upgrade servicesC
Read-only

GetPossibleServicesForUpgrade for accountId.

Inputs: accountId (required).

get_preview_invoicesGet preview invoicesC

GetPreviewInvoices — current open billing month preview.

Inputs: resellerContext, groupByDepartments.

get_reportsGet reportsA

GetReports — list available report names. Do NOT use this to find companies or subscriptions; use find_companies / list_company_subscriptions.

Inputs: no named parameters.

get_resellerGet resellerC

GetReseller — reseller by accountId.

Inputs: accountId (required).

get_reseller_by_vat_idGet reseller by VAT IDD

GetResellerByVatId.

Inputs: vatId (required).

get_resellersGet resellersC

GetResellers — resellers under parentAccountId.

Inputs: parentAccountId (required).

get_security_rolesGet security rolesC

GetSecurityRoles for company/reseller accountId.

Inputs: accountId.

get_service_informationGet service informationC

GetServiceInformation by serviceName.

Inputs: serviceName (required).

get_special_dealGet special dealC

GetSpecialDeal discounts for accountId.

Inputs: accountId (required).

get_subscriptionGet subscriptionB

GetSubscription by accountId. Prefer list_company_subscriptions for company-wide lists. compact=true by default.

Inputs: accountId (required), compact, resellerContext.

get_subscription_fields_for_renewGet subscription fields for renewC
Read-only

GetSubscriptionFieldsForRenew for accountId.

Inputs: accountId (required).

get_subscription_fields_for_upgradeGet subscription fields for upgradeC
Read-only

GetSubscriptionFieldsForUpgrade for accountId + targetProductName.

Inputs: accountId (required), targetProductName (required).

get_subscriptionsGet subscriptionsA

GetSubscriptions under parentAccountId. For "subscriptions of company X by name" prefer list_company_subscriptions. compact=true by default (drops huge Fields arrays).

Inputs: parentAccountId (required), compact, activeOnly, resellerContext, +1 more.

get_subscription_with_addonsGet subscription with addonsC

GetSubscriptionWithAddons — full detail for one subscription including addons.

Inputs: accountId (required), resellerContext.

get_userGet userC

GetUser — user by accountId.

Inputs: accountId (required).

get_usersGet usersC

GetUsers — users under companyAccountId.

Inputs: companyAccountId (required).

list_api_endpointsList Simple API endpointsB

Catalog of MarketplaceSimpleAPI 1.0.0 endpoints with tags, summaries, dedicated MCP tool names (if any), and write/destructive risk flags.

Inputs: tag, onlyReadable.

list_company_subscriptionsList company subscriptions (compact)A
Read-only

PREFERRED for "which subscriptions does company X have?". Resolves company by accountId or name (via find_companies), then GetSubscriptions. Returns a compact summary (no huge Fields arrays). Use activeOnly=true (default) for active services only.

Inputs: accountId, activeOnly, companyName, parentAccountId, +1 more.

list_credit_check_orders_for_approvalList credit check ordersB
Read-only

ListCreditCheckOrdersForApproval — pending credit check orders.

Inputs: no named parameters.

list_marketplacesList country marketplace URLsA

Static country keys → marketplace base URLs (Switzerland, Germany, Debug, …). No credentials required. For API-owned marketplaces use get_owned_marketplaces.

Inputs: no named parameters.

list_marketplace_servicesList marketplace servicesD

ListMarketplaceServices for marketplaceId.

Inputs: marketplaceId (required).

reset_default_renew_valuesReset default renew valuesB

WRITE: ResetDefaultRenewValues — clears saved renew config for accountId.

Inputs: accountId (required).

retry_last_failed_provisioningRetry last failed provisioningC

WRITE: RetryLastFailedProvisioning for a subscription accountId.

Inputs: accountId (required).

set_credit_limitSet credit limitA

WRITE: SetCreditLimit. Omit limit (or leave empty per API) to remove the credit limit; comment is required.

Inputs: comment (required), accountId (required), limit.

set_special_dealSet special dealB

WRITE: SetSpecialDeal — create/update special deal discount for accountId.

Inputs: accountId (required), specialDeal (required).

update_companyUpdate companyB

WRITE: UpdateCompany. Pass company object with accountId and fields to change.

Inputs: company (required).

update_departmentUpdate departmentB

WRITE: UpdateDepartment. Pass department object with accountId and fields to change.

Inputs: department (required).

update_resellerUpdate resellerC

WRITE: UpdateReseller. Pass reseller object with accountId and fields to change.

Inputs: reseller (required).

update_subscriptionUpdate subscriptionC

WRITE: UpdateSubscription. Pass subscription object with accountId and field changes.

Inputs: subscription (required).

update_userUpdate userC

WRITE: UpdateUser. Pass user object with accountId and settings to change.

Inputs: user (required).

validate_sessionValidate sessionA

Optional health check (PingPong). Login is automatic on other tools — do not call this before every query.

Inputs: no named parameters.

validate_subscription_fieldsValidate subscription fieldsA

WRITE-ish: ValidateFields — validates subscriptionAccount before create. Does not provision.

Inputs: subscriptionAccount (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.4/5.0

    Scored across 60 tools

    Disambiguation3/5

    The set has many overlapping retrieval tools, especially get_company/get_companies/find_companies, get_subscription/get_subscriptions/list_company_subscriptions, and multiple marketplace/service lookup tools. Descriptions do provide preferred-tool guidance, which reduces confusion, but an agent still has to carefully choose among several near-duplicates.

    Naming Consistency3/5

    Most names are snake_case verb_noun, but the set mixes get_, list_, find_, create_, update_, execute_, validate_, set_, reset_, approve_, decline_, and a vague api_request. The pattern is readable but not predictable enough for a 60-tool surface.

    Tool Count2/5

    Sixty tools is very heavy for a marketplace API surface and includes many specialized one-off operations. While the domain is broad, the count exceeds what an agent can reliably navigate without strong grouping or consolidation.

    Completeness4/5

    The surface covers substantial lifecycle operations for companies, users, departments, resellers, subscriptions, invoices, reports, credit, marketplaces, and custom actions. Some destructive and rare operations are only available through api_request, so coverage is broad but not fully self-contained.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI assistants to interact with the Nimble REST API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.
      14,856 npm
      Apache 2.0
    • A
      license
      Not graded
      quality
      F
      maintenance
      Enables AI assistants to manage billing, plans, features, and entitlements via Schematic. Supports company lookup, plan management, feature creation, and override configuration through natural language.
      56 npm
      2
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Provides AI assistants with read and safe-write access to Alternative Payments customers, invoices, payment requests, transactions, payouts, and webhooks without directly moving money.
      Apache 2.0