@kadam-net/mcp-server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | Log level: trace, debug, info, warn, error, fatal (default: info) | |
| KADAM_ADV_API_KEY | No | Advertiser API key from partners.kadam.net | |
| KADAM_PUB_API_KEY | No | Publisher API key from pub.kadam.net | |
| KADAM_ADV_API_BASE | No | Advertiser API URL (default: https://partners.kadam.net/api/v1) | |
| KADAM_PUB_API_BASE | No | Publisher API URL (default: https://pub.kadam.net/api) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| kadam_adv_list_campaignsA | List advertiser campaigns with pagination. Filter by campaign group (folderId), status, type, date range, or search query. |
| kadam_adv_create_campaignA | Create a new advertiser campaign. Required: type, name, url, folderId (campaign group ID), pricingModel, bid, dailyBudget. Pass dryRun: true to only check the payload — nothing is created and the same field errors are reported, which is the cheap way to find out whether bids, targeting and limits are acceptable before committing. |
| kadam_adv_update_campaignA | Update a campaign (read-modify-write): pass only the fields to change, same names as create. Handles all targeting/budget/bid/schedule/conversion edits. For status changes use set_campaign_status. |
| kadam_adv_set_campaign_statusA | Set status for multiple campaigns. Pass comma-separated IDs and status: active, paused, archived, or restored (take out of the archive). The API answers per campaign, so some IDs can be refused while others succeed. |
| kadam_adv_delete_campaignsA | Permanently delete campaigns together with their creatives. Requires confirm=true. A campaign must be archived first (use set_campaign_status with status=archived), otherwise the whole call is rejected. Retrying a call that already deleted the campaigns is rejected too, since deleted campaigns are no longer addressable. |
| kadam_adv_move_campaignsA | Move one or more campaigns to a campaign group. Pass comma-separated campaign IDs and the target campaign group ID. Validation errors reject the whole request; a successful response means every requested campaign was moved. |
| kadam_adv_update_campaign_bidA | Change ONLY the bid for countries the campaign ALREADY targets (does NOT change geo). To add or change countries use kadam_adv_update_campaign. Unknown countries error out; omit countries to re-bid all current ones. |
| kadam_adv_bulk_update_bidsA | Set the same bid on multiple campaigns at once. All campaigns in the batch must share one pricing model (mixing CPC/CPA errors out). Countries are required (backend rejects an empty list). |
| kadam_adv_update_site_bidsB | Set per-site (zone) bids for campaigns. Bid is a number ('0.05'), a multiplier ('x1.5'), or '0' to remove. |
| kadam_adv_copy_campaignA | Copy a campaign. Targeting, limits and bids are cloned into a new campaign; statistics and spend are not. The copy always starts paused and goes through moderation again, so it does not spend until activated. Creatives are copied too (all of them by default) and are moderated as new ones. |
| kadam_adv_get_traffic_forecastA | Forecast how much traffic a bid can buy for a targeting set, based on yesterday's auction. Use it before creating a campaign or raising a bid. Targeting with too little traffic yesterday comes back with an empty curve — that means the forecast could not be built, not that the traffic is zero. |
| kadam_adv_set_campaign_rssA | Point a native campaign at an RSS feed so creatives are imported from it, or stop the import by sending an empty link. Native campaigns only — other formats are rejected. The import runs on a schedule, so a success here means the feed was saved, not that creatives exist yet. |
| kadam_adv_get_campaignA | Get full campaign configuration by ID, including landing page URL, bids per country, budgets, targeting (devices, OS, browsers, languages, sites, SSPs, audiences), frequency caps, schedule, and conversion settings. Use after kadam_adv_list_campaigns to inspect one campaign in detail. |
| kadam_adv_list_campaign_foldersA | List advertiser campaign groups with pagination. Optional search by name. A campaign group (called 'campaign group' / 'Группа кампаний' in the Kadam UI) is the same entity the API/tool calls a folder. |
| kadam_adv_create_campaign_folderA | Create a new campaign group (called 'campaign group' / 'Группа кампаний' in the Kadam UI; API term: folder). |
| kadam_adv_get_campaign_folderA | Get a single campaign group by ID: name, archived state, budgets and distribution (campaign group = the UI term for a folder). |
| kadam_adv_update_campaign_folderB | Partially update a campaign group: rename and/or change budgets and distribution. Only the provided fields are changed (campaign group = the UI term for a folder). |
| kadam_adv_set_campaign_folder_statusA | Bulk action on campaign groups (comma-separated IDs): activate/pause all campaigns in the groups, archive the groups together with their campaigns, or restore archived groups and their campaigns (campaign group = the UI term for a folder). archive and restore are each other's inverse: restore accepts ONLY archived group IDs and rejects the whole call if a live ID is passed. |
| kadam_adv_list_audiencesA | List advertiser audiences with pagination. Filter by search query, sort by field and order. |
| kadam_adv_get_audienceA | Get a single audience by ID. Returns type-specific details: tracking code for pixel/s2s, campaign links for stat, linked audiences for s2s. |
| kadam_adv_create_audienceA | Create an audience. Required fields by type: • audience_code (pixel) — name, expireDays; optional createFingerprint. • audience (stat) — name, expireDays, campaignIds, plus >=1 of hasClicks/hasConversions/hasHolds/hasRejects. • s2s — name, expireDays, linkedAudienceIds (pixel/fingerprint IDs). • fingerprint — not created directly; set createFingerprint=true on a pixel/stat audience. Set dryRun=true to check the payload without creating anything — useful while assembling a campaign and its audience together. |
| kadam_adv_update_audienceA | Update an existing audience (read-modify-write). Fetches current state, merges your changes, sends full payload. Type cannot be changed. Pass only the fields you want to change. |
| kadam_adv_get_audience_paramsA | Hardcoded parameter values a pixel or S2S audience substitutes into its tracking code. Only these two audience kinds have them, and only their owner can read them — an audience shared with the account answers as not found. Slots that were never set come back as null, which means the code keeps the {placeholder} as is. |
| kadam_adv_set_audience_paramsA | Set the hardcoded parameters of a pixel or S2S audience. This replaces the whole set: a slot you do not send is cleared, so send every value you want to keep. Read the current ones with kadam_adv_get_audience_params first. Values that look like a {placeholder} are refused — they would stand in for the template's own placeholders. |
| kadam_adv_delete_audienceA | Permanently delete an audience. Requires confirm=true for safety. |
| kadam_adv_list_creativesB | List advertiser creatives with pagination. Filter by campaign, status, or search query. |
| kadam_adv_create_creativeA | Create a creative. Accepts image/video as a URL or local file path. Required fields by type:
|
| kadam_adv_update_creativeA | Update an existing creative (read-modify-write). Fetches current state, merges your changes, sends full payload. Pass only the fields you want to change. For image changes, create a new creative instead. |
| kadam_adv_set_creative_statusA | Set status for multiple creatives. Pass comma-separated IDs and status: active, paused, archived, or restored (take out of the archive). The API answers per creative, so some IDs can be refused while others succeed. restored is rejected for the whole call if the creative's campaign is itself archived — restore the campaign first. |
| kadam_adv_delete_creativesA | Permanently delete creatives. Requires confirm=true. A creative must be archived first (use set_creative_status with status=archived), otherwise the whole call is rejected. Retrying a call that already deleted the creatives is rejected too, since deleted creatives are no longer addressable. |
| kadam_adv_get_creative_test_conversionA | Links for checking that a creative's conversion tracking works. The go link makes a real test click when opened — it writes a click id, resolves the macros and redirects to the landing exactly as a served ad does, so the advertiser's postback can be verified end to end. This tool only hands the links over; nothing is registered until someone opens one. HTML-tag creatives have no single landing link and come back without a go link; the formats rendered in a frame also carry a preview link. |
| kadam_adv_copy_creativesA | Copy creatives into other campaigns. Every creative is copied into every target campaign, so 2 creatives and 2 targets produce 4 copies. Target campaigns must have the same ad format as the source, and each landing URL must stay on its target campaign's domain. Originals are untouched; copies start paused and go through moderation. |
| kadam_adv_move_creativesA | Move creatives to another campaign of the same ad format and the same pricing model. This is not a silent reparenting: the moved creatives lose their creative-level geo bids, are paused and go back to moderation. If any creative or the target campaign fails the checks, nothing moves. To keep the originals in place, copy instead. |
| kadam_adv_set_creative_bidsA | Set per-country bids on creatives. The list replaces the creatives' own bids entirely, so a country left out of it falls back to the campaign bid — send every country you want priced, not just the one you are changing. All creatives must belong to one campaign, every country must be targeted by that campaign, and a country may appear only once across the whole list. CPA campaigns are rejected: their bid is system-managed. |
| kadam_adv_upload_bulk_imagesA | First step of a bulk creative batch: stage images so they can be turned into creatives. Each image is checked against the formats of the target campaigns, which must be compatible with each other. Staging is asynchronous — this call only queues the work and returns a job; read the stagedId values from kadam_adv_get_bulk_job once it is done. Staged images count against the account's daily creative limit, and a batch that would exceed it is rejected. |
| kadam_adv_create_bulk_creativesA | Second step of a bulk creative batch: turn staged images into creatives. Every item is created in every listed campaign, so the batch size is items × campaigns. Each item needs a stagedId from kadam_adv_upload_bulk_images. Creation is asynchronous — this call queues the work and returns a job; read the per-row result from kadam_adv_get_bulk_job. Sending the same payload again returns the same job instead of creating the creatives twice. |
| kadam_adv_get_bulk_jobA | State of a bulk creative batch, for both steps: staged images and what staging refused for an upload job, the per-row outcome for a creation job. Status done only means the worker finished — individual rows can still have failed, so read the counters before reporting success. |
| kadam_adv_list_finance_operationsA | Lists financial operations (deposits, charges, refunds). Use to check account balance, recent transactions, and spending history. |
| kadam_adv_list_payment_systemsA | Lists the payment systems the account may deposit through, with per-currency deposit conditions: commission, minimum and maximum amount, and the exchange rate to the account currency. Use before advising on a deposit. Systems reserved for administrators are not returned. |
| kadam_adv_get_day_money_limitA | Gets the daily spending limit of the WHOLE ACCOUNT, not of a single campaign (for a campaign budget use kadam_adv_get_campaign). A limit of 0 means no cap. When the reported minimum is null the account currency does not support changing the limit. |
| kadam_adv_set_day_money_limitA | Sets the daily spending limit of the WHOLE ACCOUNT, not of a single campaign (for a campaign budget use kadam_adv_update_campaign). Pass 0 to remove the limit, otherwise the amount must be at least the minimum reported by kadam_adv_get_day_money_limit. Only accounts in the supported currency may change it. Raising or removing the limit resumes campaigns that it had stopped. |
| kadam_adv_get_accountA | Gets the current advertiser account profile: id, balance, currency, registration date, and timezone offset in hours from UTC (-12 to 12). Does not return email or name. |
| kadam_adv_get_balanceA | Lightweight current advertiser balance and currency. Use for alerts and balance checks; prefer this over kadam_adv_get_account or finance operations when you only need the balance. |
| kadam_adv_get_statsB | Advertiser statistics. reportType: 'custom' (default, report builder), 'sites' (per-site), or 'conversions' (event log). For custom reports use names like 'spend,clicks,ctr' (metrics) and 'day,campaign,country' (groupBy). |
| kadam_adv_block_sitesA | Stop or resume buying traffic from sites (zones) in the given campaigns. Zone IDs come from the sites report ( |
| kadam_adv_list_autorulesA | List autorules (campaign automation). Omit campaignId for all rules of active campaigns, or pass it for one campaign. Returns full rule definitions. |
| kadam_adv_create_autoruleA | Create an autorule on a CPC campaign (autorules are CPC-only). Campaigns usually carry several rules (a strategy); call once per rule. bidChange rules require slices + bidRate + bidMax and a spend/clicks condition. A client token holds at most 5 rules per campaign and 300 per account — going over either is refused, so delete a rule before adding one. A token issued to Kadam staff for this account is not bound by those two limits. |
| kadam_adv_update_autoruleA | Update an autorule (read-modify-write). Pass only the fields to change; full payload is rebuilt from current state. |
| kadam_adv_set_autorule_statusB | Enable or disable an autorule without deleting it. |
| kadam_adv_delete_autoruleA | Permanently delete an autorule. Requires confirm=true. |
| kadam_adv_get_extended_statsA | Bid Optimization: per-slice stats grid for drilling down and setting bids (requires Bid Optimization access on the account). Drill by appending a sliceId to pathIds; reuse each row's pathIds to set bids via kadam_adv_update_extended_bids. Use ONE campaign to see per-row bids. |
| kadam_adv_list_extended_bidsA | List the per-slice bid overrides currently set on campaign(s) (Bid Optimization). Paginated. |
| kadam_adv_update_extended_bidsA | Set / multiply / blacklist / remove per-slice bids (Bid Optimization). Bulk: every bid op applies to all listed campaigns. action: set (needs mode+bid), off (blacklist), on (un-blacklist), remove (delete). Get pathIds from kadam_adv_get_extended_stats. |
| kadam_adv_reset_extended_bidsA | Drop every per-slice bid of the listed campaigns at once, returning them to the campaign-level bid. Blacklisted slices (action=off) are dropped too, so those slices start being bought again. Requires confirm=true: the dropped bids are not recoverable. To remove a single slice use kadam_adv_update_extended_bids with action=remove. |
| kadam_adv_toggle_autorule_slice_blockA | Exclude a slice from the campaign's bid autorules, or let them back in. This does not stop buying the slice — that is action=off in kadam_adv_update_extended_bids; it only keeps the autorules from rewriting the bid you set by hand. The call toggles, and the answer says which state the slice ended in, so read kadam_adv_get_campaign_autorule_slices first if you need a specific state. |
| kadam_adv_get_campaign_autorule_slicesA | Slices the campaign's bid autorules act on, one entry per rule. Use it to tell apart a bid you set by hand from one an autorule keeps rewriting. |
| kadam_adv_get_campaign_bid_restrictionsA | Bid limits of a campaign: the cap a fixed bid must stay under, the largest allowed multiplier, and the campaign bid the multiplier applies to (null when the geo bids differ). Read it before writing bids to know what will pass. |
| kadam_adv_get_dictionaryA | Gets one reference dictionary used to build campaign targeting: campaign-types, browsers, platforms (OS), devices, connection-types, categories, isps, conversion-templates, countries, regions or cities. Call this instead of guessing IDs — every targeting field expects the numeric ids returned here. campaign-types only lists the types this account may actually create. categories requires campaignType because the allowed set differs per type. isps, regions and cities require countryId, and are paginated and searchable because a single country can hold tens of thousands of entries. countries is the entry point of the geo chain: its ids are what a campaign stores in countries and what countryId expects here, while regions and cities give the ids a campaign stores in cities. cities can be narrowed to one region with regionId. platforms, devices and categories are trees: children are nested under their parent. conversion-templates entries carry the approved/hold/reject postback status strings, which are what a campaign's conversion field needs. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| kadam_launch_campaign | Step-by-step guide to create a complete advertising campaign with creatives |
| kadam_campaign_performance | Get a formatted performance report for a campaign over a time period |
| kadam_optimize_sites | Analyze site performance and suggest blacklisting underperforming sites |
| kadam_account_overview | Get a complete overview of the account: balance, active campaigns, top performers |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| campaign-types | |
| categories | |
| pricing-models | |
| creative-formats | |
| report-dimensions | |
| api-overview |
TDQS
Scored across 58 tools
Tools are mostly differentiated by resource and action, and descriptions explicitly resolve several overlaps (e.g. get_balance vs get_account, update_campaign_bid vs bulk_update_bids). Some clusters around finance, bid optimization, and bulk campaign/creative operations still require careful reading, but boundaries are documented.
All 58 tools use a consistent kadam_adv_ prefix and snake_case verb_noun naming. Verbs like get, list, create, update, delete, set, move, copy, and reset are used predictably with no mixed conventions.
58 tools is far above the typical 3–15 range and makes agent navigation heavy. While many tools map to distinct API operations, the surface could be consolidated across finance, bid optimization, and folder/creative bulk actions.
Core lifecycle coverage is strong across campaigns, creatives, audiences, autorules, bid optimization, finance, and dictionaries. Minor gaps exist (e.g. account profile updates, deposit creation, some reporting consolidation), but agents can work around them.