Connect your AI Agents to Adobe Experience Manager in minutes

Merge lets you securely connect your agents to Adobe Experience Manager and thousands of tools instantly
Adobe Experience Manager
Learn more about Merge Agent Handler

Available tools

delete_asset

Delete an asset from the DAM. Use listfolders or searchassets to find asset IDs. Referenced assets are refused unless force is true. Long deletes run in the background: poll the returned job.jobid with getassetjobstatus.

search_assets

Search DAM assets by text (full-text, hybrid, or natural language) and structured term, range, and exists filters, with sorting, field projection, and facets. Use this to find assets by content or metadata; use list_folders to browse by location.

get_asset_job_status

Get the state of a background asset job (QUEUED, PROCESSING, COMPLETED, COMPLETEDWITHERRORS, FAILED). Use the job.jobid returned by deleteasset. For URL imports use getimportjob_status instead.

get_asset_metadata

Get an asset's metadata: editable assetMetadata (dc:title, keywords, ...) and read-only repositoryMetadata (name, path, format, size), plus the etag updateassetmetadata needs. Use listfolders or searchassets to find asset IDs.

update_asset_metadata

Edit an asset's assetMetadata with JSON Patch operations (add, replace, remove, copy, move, test). Call getassetmetadata first to see property names and get the etag; repositoryMetadata is read-only. Returns the updated metadata.

list_asset_relations

List an asset's relations to other assets, optionally filtered to some relation types. Use listassetrelationtypes to see which types exist. Use listfolders or search_assets to find asset IDs.

create_asset_relations

Relate an asset to other assets, each with a relation type such as 'sources' or 'derived'. Use searchassets or listfolders to find both asset IDs, and listassetrelation_types to reuse existing types.

list_asset_relations_by_type

List an asset's relations of one relation type. Use listassetrelationtypes to find the types, and listasset_relations to list several types at once.

delete_asset_relations_by_type

Remove all of an asset's relations of one relation type. Use listassetrelationtypes to find the types. To remove a single relation use deleteasset_relation.

delete_asset_relation

Remove one relation between two assets. Use listassetrelations to find the relationtype and relatedassetid. To clear a whole type use deleteassetrelationsby_type.

list_asset_relation_types

List the relation type names an asset has (e.g. sources, derived). Use the values with listassetrelations, listassetrelationsbytype, or deleteassetrelationsbytype. Use listfolders or searchassets to find asset IDs.

list_asset_renditions

List an asset's static renditions with name, MIME type, size, and pixel dimensions. Use listfolders or searchassets to find asset IDs.

import_asset_from_url

Import 1-300 files from URLs into a DAM folder as new assets, with optional metadata. Use listfolders to find the target folder ID or path. Runs in the background: poll jobid with getimportjobstatus, then getimportjobresult for the new asset IDs.

get_import_job_status

Get the state and progress counters of a URL import job. Use the jobid returned by importassetfromurl. Once state is COMPLETED or FAILED, call getimportjob_result for per-file outcomes.

get_import_job_result

List per-file outcomes of a URL import job, including the new asset ID of each imported file and the error for each failed one. Use the jobid from importassetfromurl; check getimportjob_status first.

list_collections

List Dynamic Media asset collections (curated groups of assets and collections) with their titles. Paginate with cursor. Returns collection IDs for getcollection, listcollection_items and the collection write tools.

create_collection

Create an asset collection with a title and initial assets/collections. Use searchassets for asset IDs. May run asynchronously: if 'job' is returned, poll getcollectionjobstatus. Returns the new collection ID when created immediately.

get_collection

Get an asset collection's title, description, repository metadata and ETag. Use listcollectionitems for its contents. Use list_collections to find collection IDs.

update_collection

Update an asset collection's title, description or custom metadata. Pass etag from getcollection, or null to fetch it. Use updatecollectionitems to change its contents. Use listcollections to find collection IDs.

delete_collection

Delete an asset collection; the assets in it are not deleted. Pass etag from getcollection, or null to fetch it. May run asynchronously: if 'job' is returned, poll getcollectionjobstatus. Use list_collections to find collection IDs.

list_collection_items

List the assets and sub-collections in an asset collection, plus the ETag that updatecollectionitems needs. Paginate with cursor. Use list_collections to find collection IDs.

update_collection_items

Add or remove assets/collections in an asset collection. Pass etag from listcollectionitems, or null to fetch it. Use searchassets for asset IDs. May run asynchronously: if 'job' is returned, poll getcollectionjobstatus.

get_collection_job_status

Get the state (PROCESSING, COMPLETED, FAILED) of an asynchronous collection job started by createcollection, deletecollection or updatecollectionitems. Use the job_id from their 'job' output.

list_asset_smart_crops

List the Dynamic Media smart crops (named crop regions with aspect ratios) defined for an image or video asset. Paginate with cursor. Use search_assets to find asset IDs.

list_image_presets

List the Dynamic Media image presets (named output size/format settings) configured for image delivery. Paginate with cursor.

create_asset_archive

Request a zip archive of one or more assets and chosen renditions for download. Runs asynchronously: poll getarchivestatus with the returned id for the download URLs. Use search_assets to find asset IDs.

get_archive_status

Get the state of an asset archive started by createassetarchive. When COMPLETED, downloadurls lists the archive file URLs; warnings name assets that could not be included. Use the id returned by createasset_archive.

list_content_sources

List every Content AI content source (AEM author/publish, acquisition crawls, custom indexes) with its searchable spaces and fields. Filter by type. Use the names with searchcontentsources and generatesearchanswer; use listacquisitionsources for full crawl configs.

create_acquisition_source

Create a Content AI acquisition content source that crawls a website into a searchable index. Returns its slug 'name'. Crawls start on the schedule, or call triggeracquisitionrun. Use listacquisitionsources to check an existing name first.

list_acquisition_sources

List Content AI acquisition (website crawl) content sources with their full crawl configuration. Filter by status (ACTIVE or ARCHIVED). Use listcontentsources to see all source types.

get_acquisition_source

Get one Content AI acquisition content source by name: crawl config, status, searchable spaces, and its ETag for update/patch. Use listacquisitionsources to find names. Only acquisition sources can be fetched individually.

update_acquisition_source

Fully replace an acquisition source's description and crawl config; omitted optional parts are cleared. Prefer patchacquisitionsource to change a few fields or archive. Use listacquisitionsources for names, getacquisitionsource for the ETag.

patch_acquisition_source

Change selected fields of an acquisition source (merge patch). Set status ARCHIVED to delete it: crawls stop and content is removed after a grace period. Use listacquisitionsources for names and getacquisitionsource for the ETag.

trigger_acquisition_run

Start an on-demand crawl of an acquisition content source now. Fails with a conflict if a run is already in progress. Poll getlatestacquisitionrun for progress. Use listacquisition_sources to find names.

get_latest_acquisition_run

Get the state and metrics of the most recent crawl run of an acquisition content source. Use after triggeracquisitionrun; AEM answers not-found until the run starts (about 10 seconds), so retry before concluding the source is missing. Use listacquisitionsources to find names.

search_content_sources

Search documents in one Content AI content source with fulltext, semantic (vector), filter, or hybrid queries, plus sorting and aggregates. Use generatesearchanswer for an AI-written answer instead. Use listcontentsources for source names, types, and searchable fields.

generate_search_answer

Ask a natural-language question and get an AI-generated answer grounded in one Content AI content source, with the source documents it used. Use searchcontentsources to retrieve raw matching documents instead. Use listcontentsources to find source names.

list_published_fragments

List Content Fragments as delivered by the publish (default), preview or author tier, optionally under a folder path. Use this for live/published content; use listfragments for authoring. Paginate with cursor. Returns fragment IDs for getpublished_fragment.

get_published_fragment

Get a delivered Content Fragment by ID from the publish (default), preview or author tier, optionally embedding its references. Use listpublishedfragments to find fragment IDs, or getpublishedfragmentbypath when you know the path.

get_published_fragment_by_path

Get a delivered Content Fragment by its exact repository path (e.g. /content/dam/site/en/article) from the publish (default), preview or author tier. Use getpublishedfragment when you have the ID. Returns the fragment ID.

list_published_fragment_references

List the resources (fragments, assets, pages, tags) a delivered Content Fragment references, direct or all levels. Use listpublishedfragmentreferencedby for the reverse. Use listpublishedfragments to find fragment IDs.

get_published_fragment_model

Get the Content Fragment Model a delivered fragment is based on, from the publish (default), preview or author tier. Use listpublishedfragments to find fragment IDs.

list_published_fragment_variations

List the variations of a delivered Content Fragment with their field values. Paginate with cursor. Use listpublishedfragments to find fragment IDs; returns variation names for getpublishedfragment_variation.

get_published_fragment_variation

Get one variation of a delivered Content Fragment, optionally embedding its references. Use listpublishedfragments for fragment IDs and listpublishedfragment_variations for variation names.

list_published_variation_references

List the resources a delivered fragment variation references, direct or all levels. Use listpublishedfragments for fragment IDs and listpublishedfragment_variations for variation names.

list_published_fragment_referenced_by

List the pages and fragments that reference a delivered Content Fragment (where it is used). Paginate with cursor. Use listpublishedfragmentreferences for what it points to. Use listpublished_fragments to find fragment IDs.

list_published_models

List Content Fragment Models available on the publish (default), preview or author delivery tier. Paginate with cursor. Returns model IDs for getpublishedmodel, getmodeljsonschema and listpublishedmodelfragments.

get_published_model

Get a Content Fragment Model's title, path and tags from the publish (default), preview or author delivery tier. Use getmodeljsonschema for its field definitions. Use listpublished_models to find model IDs.

get_model_json_schema

Get the JSON Schema (2020-12) describing a Content Fragment Model's fields: names, types and descriptions. Use it to interpret a published fragment's 'fields'. Use listpublishedmodels to find model IDs.

list_published_model_fragments

List the delivered Content Fragments based on one Content Fragment Model. Paginate with cursor. Use listpublishedmodels to find model IDs; returns fragment IDs for getpublishedfragment.

list_folders

Browse the DAM by path: returns the folder itself plus its children. This is the main way to find folder and asset IDs; set types to ['FOLDER', 'ASSET'] to include assets. Start at /content/dam. Use get_folder when you already have a folder ID.

get_folder

Get a folder by ID with its children (folders by default; add 'ASSET' to types for assets). Use list_folders to find folder IDs or to browse by path.

create_folders

Create up to 10 DAM folders by full path; missing parent folders are created too. Returns the new folder IDs, and per-folder failures (an existing path is reported in failed, not as an error). Slow batches run in the background: poll job.jobid with getfolderjobstatus.

delete_folders

Delete up to 10 DAM folders by path. Use listfolders to find paths; use deletefolder when you have an ID. Non-empty folders need recursive=true. Per-folder failures are returned, not raised. Slow deletes run in the background: poll job.jobid with getfolderjobstatus.

delete_folder

Delete one DAM folder by ID. Use listfolders to find folder IDs; use deletefolders to delete by path. Non-empty folders need recursive=true. Slow deletes run in the background: poll job.jobid with getfolderjobstatus.

get_folder_job_status

Get the state of a background folder job (PROCESSING, COMPLETED, COMPLETEDWITHERRORS, FAILED). Use the job.jobid returned by createfolders, deletefolders, or deletefolder; a not-found in the first seconds means the job is not visible yet, so retry. Deletes take about a minute. When done, call getfolderjob_result for per-folder outcomes.

get_folder_job_result

Get the per-folder results of a finished background folder job (created, deleted, or failed folders). Use the job.jobid from createfolders, deletefolders, or deletefolder; check getfolderjob_status first.

list_forms

List Core Components Adaptive Forms available to the user, with IDs and repository paths. Older Foundation-based forms are not listed and cannot be read or submitted through this API. Use the IDs with getformdefinition, getformdata, and submit_form.

get_form_definition

Get an Adaptive Form's definition: its field model, data schema, and accepted submission types, optionally localized. Call before submitform to learn the expected data. Use listforms to find form IDs.

get_form_data

Get prefill or previously saved data for an Adaptive Form, optionally a specific submission by dataref (the submissionid from submitform). Use listforms to find form IDs.

submit_form

Submit data to an Adaptive Form as JSON, running its server-side validation and submit action. Returns the submissionid. Call getformdefinition first for the data schema; use listforms to find form IDs.

create_form_callback

Register a callback URL that AEM Forms calls when an Adaptive Form is submitted (Workfront Fusion). Returns the callback ID for getformcallback, updateformcallback, and deleteformcallback.

get_form_callback

Get a registered AEM Forms callback by ID. Callback IDs come from createformcallback; there is no list endpoint.

update_form_callback

Replace a registered AEM Forms callback (URL, status, trigger, target service). All required fields must be sent again; optional ones left null are cleared. Use getformcallback to read current values; IDs come from createformcallback.

delete_form_callback

Delete a registered AEM Forms callback so AEM stops calling its URL. Callback IDs come from createformcallback.

list_fragment_references

List the assets, fragments, pages and experience fragments a Content Fragment directly references. Use getfragmentreferencestree for the full nested tree, and listfragmentreferencedby for what references it. Use list_fragments to find IDs.

get_fragment_references_tree

Get every reference of a Content Fragment, recursively, as a tree of pointers plus a map of hydrated references. Use listfragmentreferences for direct references only. Use listfragments or searchfragments to find fragment IDs.

list_fragment_referenced_by

List the pages, experience fragments and Content Fragments that reference one fragment, with pagination. Use listreferencedby to check many fragment paths at once. Use listfragments or searchfragments to find fragment IDs.

list_referenced_by

For several Content Fragment paths at once, list the pages, experience fragments and fragments that reference each. Use listfragmentreferencedby for one fragment ID with pagination. Use listfragments or search_fragments to find paths.

list_fragment_translations

Get a Content Fragment's locale and its language copies (path, locale, status). Use listlanguagecopies for several paths at once. Use listfragments or searchfragments to find fragment IDs.

list_language_copies

For several Content Fragment or folder paths at once, get each one's locale and language copies. Use listfragmenttranslations for a single fragment ID. Use listfragments or searchfragments to find paths.

list_languages

List the languages a Content Fragment can get language copies in (its site's language roots). Use before startworkflow with create-translation-structure. Use listfragments or search_fragments to find fragment paths.

list_workflows

List Content Fragment workflows (publish, unpublish, move, rename, translation structure), newest first, optionally for one fragment ID, with pagination. Use getworkflow for one workflow instance. Use listfragments to find fragment IDs.

start_workflow

Start a Content Fragment workflow: publish-folder, unpublish-fragments, unpublish-models, move-fragments, rename-fragments or create-translation-structure. Track it with getworkflow. Use listfragments, listmodels or listlanguages for the IDs it needs.

get_workflow

Get a Content Fragment workflow's state (RUNNING, COMPLETED, ABORTED...), payload and any invalid fragments. Get the ID from publishfragments, startworkflow, deleteandunpublishfragment or listworkflows.

list_fragment_tags

List the tags applied to a Content Fragment, plus the etag that replacefragmenttags and removefragmenttags take. For a variation's tags use listvariationtags. Use listfragments or searchfragments to find fragment IDs.

add_fragment_tags

Add existing AEM tags to a Content Fragment, keeping the tags it already has. Use replacefragmenttags to set the exact tag list instead. Use listfragments or searchfragments to find fragment IDs.

replace_fragment_tags

Replace all tags on a Content Fragment with the given tag IDs. Use addfragmenttags to keep existing tags. The etag from listfragmenttags is fetched automatically when null. Use listfragments or searchfragments to find fragment IDs.

remove_fragment_tags

Remove every tag from a Content Fragment. To drop only some tags, use replacefragmenttags with the tags to keep. The etag from listfragmenttags is fetched automatically when null. Use listfragments or searchfragments to find fragment IDs.

list_variation_tags

List the tags applied to one variation of a Content Fragment, plus the etag that replacevariationtags and removevariationtags take. Use listfragmentvariations for variation names and listfragments or searchfragments for fragment IDs.

add_variation_tags

Add existing AEM tags to a Content Fragment variation, keeping the tags it already has. Use replacevariationtags to set the exact list. Use listfragmentvariations for variation names and listfragments or searchfragments for fragment IDs.

replace_variation_tags

Replace all tags on a Content Fragment variation with the given tag IDs. The etag from listvariationtags is fetched automatically when null. Use listfragmentvariations for variation names and listfragments or searchfragments for fragment IDs.

remove_variation_tags

Remove every tag from a Content Fragment variation. To drop only some, use replacevariationtags. The etag from listvariationtags is fetched automatically when null. Use listfragmentvariations for variation names and listfragments or searchfragments for fragment IDs.

list_fragments

List Content Fragments, optionally under a folder path, with pagination. Use searchfragments instead to filter by status, model, tags, text or dates. Each item carries its id and etag for getfragment and the write tools.

search_fragments

Search Content Fragments by path, status, model IDs, tags, locale, metadata, full text, and created/modified/published dates or users, with sorting and pagination. Use listmodels to find model IDs. Use listfragments to simply browse a folder.

get_fragment

Get a Content Fragment with its fields, variations, tags and references, plus its etag for updatefragment, patchfragment and deletefragment. Pass locale to read a language copy. Use listfragments or search_fragments to find fragment IDs.

create_fragment

Create a Content Fragment from a model in a folder and return it with its new id and etag. Use listmodels to find model IDs, getfragmentmodel or getmodel for the fields, and listfolders for parentpath.

update_fragment

Replace a Content Fragment's title, description and field values in full; anything not sent is cleared. Use patchfragment to change only some values. Get the fragment ID and etag from getfragment.

patch_fragment

Edit parts of a Content Fragment with JSON Patch operations (e.g. replace /title) and return the updated fragment and etag. Use updatefragment to replace everything. Get the fragment ID and etag from getfragment.

delete_fragment

Permanently delete a Content Fragment. Fails for PUBLISHED or MODIFIED fragments; use deleteandunpublishfragment for those. Use listfragments or search_fragments to find fragment IDs.

delete_and_unpublish_fragment

Delete a Content Fragment and unpublish it from the publish tier in a background workflow; track it with getworkflow. Use deletefragment for never-published fragments. Use listfragments or searchfragments to find fragment IDs.

update_fragment_checkout_state

Check out a Content Fragment (lock it for the current user) or check it in (release the lock). Fails with a conflict if another user holds it. Use listfragments or searchfragments to find fragment IDs.

get_fragment_preview_url

Get the preview URL of each variation of a Content Fragment, as configured on its model. Use listfragments or searchfragments to find fragment IDs.

publish_fragments

Publish up to 50 Content Fragments by ID or path, now or at a scheduled time, optionally with references in chosen statuses. Starts a workflow; track it with getworkflow. Use listfragments or search_fragments to find IDs.

get_fragment_publication_status

Get the scheduled publish or unpublish operation pending for one Content Fragment. Use getfragmentspublicationstatus to check many at once. Use listfragments or search_fragments to find fragment IDs.

get_fragments_publication_status

Get scheduled publication status for up to 50 Content Fragments in one call, instead of calling getfragmentpublicationstatus per fragment. Unknown IDs are left out. Use listfragments or search_fragments to find fragment IDs.

copy_fragment

Copy a single Content Fragment into an existing folder and return the copy with its new id. Use copyfragmenttree to also copy the fragments it references. Use listfragments for fragment IDs and listfolders for folders.

copy_fragment_tree

Copy a Content Fragment together with the fragments it references, in the background. Returns a job; poll its jobid with getbatch. Use copyfragment for a single fragment. Use listfragments for fragment IDs and list_folders for folders.

find_and_replace_fragments

Find and replace text in the text and long-text fields of up to 20 Content Fragments. Set dryrun to preview results without saving. Use searchfragments to find fragment paths.

get_fragment_model

Get the Content Fragment Model a fragment is based on, including its field definitions and etag. Use getmodel when you already have the model ID. Use listfragments or search_fragments to find fragment IDs.

change_fragment_model

Switch a Content Fragment to a different Content Fragment Model. Fields that do not fit the new model can leave it invalid; fix them with patchfragment. Use listmodels for model IDs and list_fragments for fragment IDs.

get_fragment_model_ui_schema

Get the editor UI schema and static field schema of the model behind a Content Fragment. Use getmodeluischema when you have the model ID. Use listfragments or search_fragments to find fragment IDs.

get_fragment_metadata

Get a Content Fragment's metadata properties, its metadata form ID, and the etag for updatefragmentmetadata. Use listfragments or searchfragments to find fragment IDs.

update_fragment_metadata

Update a Content Fragment's metadata properties with JSON Patch operations. Only properties in its metadata schema can change; call getfragmentmetadata first for names and etag. Use listfragments or searchfragments to find fragment IDs.

get_fragment_permissions

List the actions (READ, EDIT, DELETE, PUBLISH, CHECKOUT, ...) the current user may take on one Content Fragment. Use checkpermissions for many paths at once. Use listfragments or search_fragments to find fragment IDs.

list_launches

List content fragment launches with pagination. Filter server-side by created, modified, published, promoted, or live-date time ranges and by creator/modifier, and sort by title, created, modified, promoted, or liveDate. Launch IDs feed get_launch and the other launch tools.

create_launch

Create a launch (a working copy of content fragments for future changes). Runs as a background job: poll getlaunchjobstatus with the returned jobid, then getlaunchjobresult for the new launch ID. Use listfragments or search_fragments to find source fragment IDs.

get_launch

Get a launch's details and its ETag (needed by updatelaunch, deletelaunch, updatelaunchsources, and rebaselaunch). Use listlaunches to find launch IDs.

update_launch

Replace a launch's properties (title, description, depth, production readiness, live date, publish agent). Full replace: omitted description or livedate is erased, so read them with getlaunch first. Use updatelaunchsources to change its fragments. Use list_launches for IDs.

delete_launch

Delete a launch. Runs as a background job: poll getlaunchjobstatus with the returned jobid. Use list_launches to find launch IDs.

list_launch_sources

List the content fragment IDs that are sources of a launch, with pagination. Use getlaunchcontent for the launch's own copies instead. Use list_launches to find launch IDs.

update_launch_sources

Add or remove content fragment sources of a launch. Runs as a background job: poll getlaunchjobstatus with the returned jobid. Use listlaunchsources for current sources and listfragments or searchfragments for fragment IDs to add.

rebase_launch

Rebase a launch onto production (or another launch), pulling in source changes. Background job: poll getlaunchjobstatus. Run getlaunchdiff first to spot conflicts. Use listlaunches for IDs.

promote_launch

Promote a launch's changes into production (or another launch), overwriting the target fragments. Background job: poll getlaunchjobstatus. Run getlaunchdiff first to review changes. Use listlaunches for launch IDs.

get_launch_diff

Start computing field-level differences between a launch and production (or another launch). Background job: poll getlaunchjobstatus, then read the differences with getlaunchjobresult. Use list_launches for launch IDs.

get_launch_content

List the content fragment copies inside a launch, with their source IDs and last promote/rebase info. Page with cursor, or look up specific content IDs (not both). Use listlaunchsources for source IDs instead. Use list_launches for launch IDs.

list_launch_jobs

List the background jobs of a launch (create, edit, promote, rebase, diff, delete) with status, progress, and timestamps, with pagination. Use listlaunches to find launch IDs; pass a jobid to getlaunchjobstatus or getlaunchjobresult.

get_launch_job_status

Check whether a launch background job is still running. When completed is true, call getlaunchjobresult. The jobid comes from createlaunch, deletelaunch, updatelaunchsources, rebaselaunch, promotelaunch, getlaunchdiff, or listlaunchjobs.

get_launch_job_result

Get the outcome of a finished launch job: final state, errors, the launch details (e.g. the new launch ID for create), and field differences for diff jobs. Check getlaunchjobstatus first. Job IDs come from the launch write tools or listlaunch_jobs.

list_models

List Content Fragment Models with pagination (cursor from pageinfo). Use searchmodels instead to filter by name, folder, status, tags, or dates. Model IDs feed get_model and fragment creation.

search_models

Search Content Fragment Models server-side by name, technical name, configuration folder, status, replication status, lock, allowed DAM folder, IDs, tags, or created/modified/published dates, with sorting and pagination. Use list_models to browse without filters.

get_model

Get a Content Fragment Model by ID, including its field definitions and its ETag for updatemodel or deletemodel. Use listmodels or searchmodels to find model IDs.

create_model

Create a Content Fragment Model with field definitions in a configuration folder. Set dryrun to validate the payload only. Returns the new model ID. Use updatemodel to change an existing model.

update_model

Edit a Content Fragment Model with JSON Patch operations (rename, add/remove/replace fields). Pass the etag from getmodel to reject the edit if the model changed since; with a null etag the latest version is edited. Use getmodel to read the current model and listmodels or searchmodels to find model IDs.

delete_model

Permanently delete a Content Fragment Model. Fails with a conflict if fragments still use it. Use listmodels or searchmodels to find model IDs.

copy_model

Copy a Content Fragment Model into another existing configuration folder, optionally renaming it. Returns the new model with its ID. Use listmodels or searchmodels to find model IDs.

publish_models

Publish up to 50 Content Fragment Models, now or at a scheduled time, by starting an AEM workflow. Returns the workflow instance ID and a per-model outcome; track it with getworkflow. Use getmodelspublicationstatus to check scheduled publications. Model IDs come from listmodels or searchmodels.

get_models_publication_status

Get the scheduled publish/unpublish status for up to 50 Content Fragment Models. Use after publishmodels with a scheduled time. Use listmodels or search_models to find model IDs.

get_model_ui_schema

Get the editor UI schema (tabs, groups, conditional fields) of a Content Fragment Model and its ETag for updatemodeluischema. Use getmodel for the field definitions instead. Use listmodels or searchmodels to find model IDs.

update_model_ui_schema

Replace the editor UI schema and constraints of a Content Fragment Model. Read the current one with getmodeluischema first. Use listmodels or search_models to find model IDs.

list_model_tags

List the tags applied to a Content Fragment Model, with the ETag that replacemodeltags and removemodeltags need. Use listmodels or searchmodels to find model IDs.

add_model_tags

Add existing tags to a Content Fragment Model, keeping its current tags. Use replacemodeltags to overwrite the set. Use listmodels or searchmodels to find model IDs.

replace_model_tags

Replace all tags on a Content Fragment Model with the given tags. Use addmodeltags to keep existing tags, listmodeltags to read them. Use listmodels or searchmodels to find model IDs.

remove_model_tags

Remove every tag from a Content Fragment Model. To drop only some tags, use replacemodeltags with the ones to keep. Use listmodels or searchmodels to find model IDs.

get_metadata_schema

Get the metadata schema bound to a content fragment or DAM folder (resolved up the folder tree) and all its metadata properties with values. Use bindmetadataschema to change the binding. Use listfragments or searchfragments to find fragment paths.

bind_metadata_schema

Bind a metadata schema to a content fragment or DAM folder (children inherit it), or pass a null schemaid to unbind it. Use getmetadata_schema to see the current binding.

get_domain

Get the base domain URL of each AEM tier (author, publish, preview) for this environment.

check_permissions

Check which actions (read, edit, delete, publish, create fragment/model, ...) the current user may perform on fragments, folders, or models, by path. Use before a write to avoid a 403.

execute_graphql_query

Run a GraphQL query against the Content Fragment GraphQL endpoint, for reading fragments across models in one call with custom fields. Errors in the query come back in 'errors'. Use list_models to learn model and field names.

create_batch

Run several Sites API write calls (POST/PUT/PATCH/DELETE) together in the background. Returns a jobid; poll it with getbatch for each sub-request's result. Sub-requests can overwrite or delete content.

list_batches

List batch requests created with createbatch, filtered by state, with pagination (cursor from pageinfo). Use get_batch for one batch's sub-request results.

get_batch

Get a batch request's status and each sub-request's status code and body. Use the jobid from createbatch or an ID from list_batches.

create_translation_project

Create a translation project with one job per target language, optionally adding content and starting translation. Runs asynchronously: poll gettranslationasyncstatus with asyncjobid; its resultitems carry the new project ID. There is no list tool for projects, so keep that ID.

get_translation_project

Get a translation project with its settings, status, and jobs (job IDs for the translation job tools). No list endpoint exists: the project ID comes from createtranslationproject via gettranslationasyncstatus resultitems.

update_translation_project

Replace a translation project's properties, including adding or dropping target languages and changing the TIF config. Full update: read current values with gettranslationproject first. Project IDs come from createtranslationproject.

delete_translation_project

Delete a translation project and its jobs. Project IDs come from createtranslationproject.

add_translation_project_content

Add content to (or remove it from) the DRAFT jobs of every target language in a translation project, optionally masked to some languages. Use updatetranslationjobcontent for one job. Async: poll gettranslationasyncstatus. Project IDs come from createtranslationproject.

run_translation_jobs_command

Run START, COMPLETE, CANCEL, or ARCHIVE on all jobs of a translation project, optionally masked to some target languages. Use runtranslationjobcommand for one job. Async: poll gettranslationasyncstatus. Project IDs come from createtranslationproject.

get_translation_job

Get a translation job (one target language) with its status and content items, including source paths for accept/reject. Job IDs come from gettranslationproject (translationjobs); project IDs from createtranslation_project.

delete_translation_job

Delete one translation job from a project. Job IDs come from gettranslationproject (translationjobs); project IDs from createtranslation_project.

run_translation_job_command

Run START, COMPLETE, CANCEL, or ARCHIVE on one translation job. Use runtranslationjobscommand for all jobs of a project. Async: poll gettranslationasyncstatus. Job IDs come from gettranslationproject.

update_translation_job_content

Add content to or remove content from one DRAFT translation job. Use addtranslationprojectcontent for all jobs of a project. Async: poll gettranslationasyncstatus. Job IDs come from gettranslationproject.

accept_translation_job_content

Accept translated content that is READYFORREVIEW in a translation job. Use gettranslationjob to find the source paths; rejecttranslationjobcontent sends it back instead. Async: poll gettranslationasyncstatus.

reject_translation_job_content

Reject translated content that is READYFORREVIEW in a translation job, with an optional comment. Use gettranslationjob to find the source paths; accepttranslationjobcontent approves instead. Async: poll gettranslationasyncstatus.

start_language_copy_sync

Start syncing language copies of a site or asset path from its source, overwriting their content. Returns the sync process; track it with getlanguagecopysync and suspend or abort it with updatelanguagecopysync.

get_language_copy_sync

Get the status of a language copy sync process. The sync ID comes from startlanguagecopy_sync.

update_language_copy_sync

Suspend or abort a RUNNING language copy sync process. The sync ID comes from startlanguagecopysync; check its status with getlanguagecopysync.

get_translation_async_status

Get the status of an asynchronous translation operation and the resources it affected (new project and job IDs). The ID is asyncjobid from createtranslationproject or the other translation write tools, or from gettranslationproject / gettranslationjob.

validate_credential

Validate the AEM bucket and credentials by listing one folder under /content/dam, or one content fragment model when only the Sites API is granted. Use this to confirm setup before calling other tools.

list_fragment_variations

List a Content Fragment's variations (name, title, field values). Use searchfragmentvariations to filter by status or dates instead. Paginated: pass pageinfo.cursor for the next page. Use listfragments or search_fragments to find fragment IDs.

create_fragment_variation

Create a new variation of a Content Fragment with a title and optional description. Returns the variation, including its generated name used by the other variation tools. Set field values afterwards with updatefragmentvariation. Use listfragments or searchfragments to find fragment IDs.

search_fragment_variations

Search a Content Fragment's variations by status (NOTPUBLISHED, PUBLISHED, MODIFIED) and by created/modified/published time or user. Use listfragmentvariations to browse all instead. Paginated via pageinfo.cursor. Use listfragments or searchfragments to find fragment IDs.

get_fragment_variation

Get one variation of a Content Fragment with its field values, tags, and references, plus the etag that updatefragmentvariation and deletefragmentvariation take. Use listfragmentvariations for variation names and listfragments or searchfragments for fragment IDs.

update_fragment_variation

Edit a Content Fragment variation's title, description, or field values with JSON Patch operations. Call getfragmentvariation first to see the field layout and its etag (fetched automatically when etag is null). Use listfragmentvariations for variation names and list_fragments for fragment IDs.

delete_fragment_variation

Permanently delete a variation from a Content Fragment, optionally unlinking references to it. The etag from getfragmentvariation is fetched automatically when null. Use listfragmentvariations for variation names and listfragments or searchfragments for fragment IDs.

list_variation_references

Get the tree of assets, fragments, and pages referenced by one Content Fragment variation. Use listfragmentvariations for variation names and listfragments or searchfragments for fragment IDs.

list_fragment_versions

List the saved versions of a Content Fragment (ID, title, label, comment, creator, date). Version IDs feed getfragmentversion, restorefragmentversion, and deletefragmentversion. Paginated via pageinfo.cursor. Use listfragments or search_fragments to find fragment IDs.

create_fragment_version

Save the current state of a Content Fragment as a new version, with an optional label and comment, so it can be restored later with restorefragmentversion. Returns the new version ID. Use listfragments or searchfragments to find fragment IDs.

get_fragment_version

Get the full contents of one saved version of a Content Fragment (fields, variations, tags, references) plus the etag deletefragmentversion takes. Use listfragmentversions for version IDs and listfragments or searchfragments for fragment IDs.

delete_fragment_version

Permanently delete one saved version of a Content Fragment; the fragment itself is unchanged. The etag from getfragmentversion is fetched automatically when null. Use listfragmentversions for version IDs and listfragments or searchfragments for fragment IDs.

restore_fragment_version

Replace a Content Fragment's current content with a saved version. Unsaved current content is lost, so call createfragmentversion first to keep it. Use listfragmentversions for version IDs and listfragments or searchfragments for fragment IDs.

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

In an mcp.json file, add the configuration below, and restart Cursor.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5      "headers": {
6        "Authorization": "Bearer yMt*****"
7      }
8    }
9  }
10}
11
Copy Code

Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.

Make sure Claude is using the Node v20+.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "mcp-remote@latest",
8        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9        "--header",
10        "Authorization: Bearer ${AUTH_TOKEN}"
11      ],
12      "env": {
13        "AUTH_TOKEN": "yMt*****"
14      }
15    }
16  }
17}
Copy Code
Copied!

Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.

Learn more in the official documentation ↗

1{
2    "mcpServers": {
3      "agent-handler": {
4        "command": "npx",
5        "args": [
6          "-y",
7          "mcp-remote@latest",
8          "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9          "--header",
10          "Authorization: Bearer ${AUTH_TOKEN}"
11        ],
12        "env": {
13          "AUTH_TOKEN": "<ah-production-access-key>"
14        }
15      }
16    }
17  }
Copy Code

In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".

You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.

Learn more in the official documentation ↗

1{
2  "inputs": [
3    {
4      "type": "promptString",
5      "id": "agent-handler-auth",
6      "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7      "password": true
8    }
9  ],
10  "servers": {
11    "agent-handler": {
12      "type": "stdio",
13      "command": "npx",
14      "args": [
15        "-y",
16        "mcp-remote@latest",
17        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18        "--header",
19        "Authorization: Bearer ${input:agent-handler-auth}"
20      ]
21    }
22  }
23}
Copy Code

FAQs on using Merge's Adobe Experience Manager  MCP server

FAQs on using Merge's Adobe Experience Manager  MCP server

Explore other MCP servers built and managed by Merge

smartrecruiters
SmartRecruiters
smartsheet
Smartsheet
snowflake
Snowflake
spotify
Spotify
sprout_social
Sprout Social
square
Square
statsig
Statsig
straker
Straker
stripe
Stripe
supabase
Supabase
tavily
Tavily
teamcity
TeamCity
teamwork
Teamwork.com
tiktok
TikTok
tinyfish
TinyFish
tinypng_api
TinyPNG
trello
Trello
tripadvisor
TripAdvisor
ukg_pro
UKG Pro
ukg_pro_hcm_recruit
UKG Pro HCM Recruitment & Onboarding
ukg_pro_wfm
UKG Pro WFM
unify
Unify
unily
Unily
vercel
Vercel

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now