Install
$ agentstack add skill-microsoft-skills-for-fabric-pipeline-migration ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
> Update Check — ONCE PER SESSION (mandatory for live migration runs) > The first time this skill is used in a session, run the check-updates skill before proceeding. > - GitHub Copilot CLI / VS Code: invoke the check-updates skill. > - Claude Code / Cowork / Cursor / Windsurf / Codex: compare local vs remote package.json version. > - Skip if the check was already performed earlier in this session. > - Skip in eval / guidance-only mode: if the user's prompt explicitly forbids tool/API calls (e.g. "Do not call any APIs or create any resources") or the skill is being invoked for offline JSON translation / eval, do not run the update check — answer the prompt directly. The check is only required for live-migration runs that will call Fabric or Synapse APIs.
> CRITICAL NOTES > 1. To find workspace details (including its ID) from a workspace name: list all workspaces, then use JMESPath filtering > 2. To find item details (including its ID) from workspace ID, item type, and item name: list all items of that type in that workspace, then use JMESPath filtering > 3. Fabric does NOT have a "Dataset" item type — all dataset properties are inlined into activity typeProperties > 4. Linked Services map to Fabric Connections — in pipeline activity JSON, referenceName on the activity's linkedService block uses the Fabric connection display name (not the connection GUID); the connection GUID is used only on Fabric REST API calls > 5. Notebook activities change from SynapseNotebook to TridentNotebook and reference notebooks by GUID, not by name > 6. Synapse global parameters become a Variable Library item in Fabric, referenced as @pipeline().libraryVariables.. Variable Library Number types are not consumable in pipelines — Synapse Float/Double are mapped to String for runtime compatibility > 7. The Validation activity type does not exist in Fabric — it must be rewritten as GetMetadata + IfCondition > 8. Triggers are intentionally excluded from this skill — recreate schedules manually in Fabric after migration > 9. SSIS package execution, SHIR-exclusive connectors, and Databricks activities are parked — see [pipeline-gotchas.md](resources/pipeline-gotchas.md)
Synapse Pipelines → Microsoft Fabric Data Factory Migration
Prerequisite Knowledge
These companion documents provide general Fabric REST patterns. Do NOT read them upfront — reference only when a specific phase requires a pattern not already covered in this skill's resource files:
- [COMMON-CORE.md](../../common/COMMON-CORE.md) — General Fabric REST API patterns, authentication & token audiences, item discovery via JMESPath
- [COMMON-CLI.md](../../common/COMMON-CLI.md) —
az rest/az loginCLI patterns, authentication recipes, pipeline run/schedule operations - [ITEM-DEFINITIONS-CORE.md](../../common/ITEM-DEFINITIONS-CORE.md) —
DataPipelineandVariableLibraryitem definition structures (pipeline-content.json, variables.json) - [SPARK-AUTHORING-CORE.md](../../common/SPARK-AUTHORING-CORE.md) — Fabric notebook item creation (needed when notebook items don't exist yet in Fabric)
> For the notebook side of the migration (the notebooks that pipeline activities call), use the companion synapse-migration skill to migrate the notebook content itself.
Table of Contents
| Topic | Reference | |---|---| | Pre-Migration Assessment (run first) | [pipeline-assessment.md](resources/pipeline-assessment.md) | | Migration Orchestrator | [pipeline-orchestrator.md](resources/pipeline-orchestrator.md) | | API-Driven Migration Workflow | [§ API-Driven Migration Workflow](#api-driven-migration-workflow) | | Activity Type Mapping | [activity-mapping.md](resources/activity-mapping.md) | | Notebook Activity Migration (primary focus) | [notebook-activity-migration.md](resources/notebook-activity-migration.md) | | Linked Services → Connections | [linked-service-to-connection.md](resources/linked-service-to-connection.md) | | Dataset Inlining | [dataset-inlining.md](resources/dataset-inlining.md) | | Global Parameters → Variable Library | [global-parameters-to-variable-library.md](resources/global-parameters-to-variable-library.md) | | Pipeline Gotchas & Parked Activities | [pipeline-gotchas.md](resources/pipeline-gotchas.md) | | Validation & Testing | [validation-testing.md](resources/validation-testing.md) | | Migration Report | [migration-report.md](resources/migration-report.md) |
Context Loading Guide
> IMPORTANT — Load only what you need. Do NOT read all resource files upfront.
| When | Read This File | |---|---| | User asks for an assessment, scope, or plan before migrating | [pipeline-assessment.md](resources/pipeline-assessment.md) | | User asks to migrate a full pipeline workspace | [pipeline-orchestrator.md](resources/pipeline-orchestrator.md) | | User asks about activity type mapping or unsupported activities | [activity-mapping.md](resources/activity-mapping.md) | | User has SynapseNotebook activities (most common) | [notebook-activity-migration.md](resources/notebook-activity-migration.md) | | User asks about linked services or connections | [linked-service-to-connection.md](resources/linked-service-to-connection.md) | | User asks about Copy, Lookup, or GetMetadata with datasets | [dataset-inlining.md](resources/dataset-inlining.md) | | User has global parameters to convert | [global-parameters-to-variable-library.md](resources/global-parameters-to-variable-library.md) | | User hits SSIS, SHIR, Databricks, or other blockers | [pipeline-gotchas.md](resources/pipeline-gotchas.md) | | Post-migration verification | [validation-testing.md](resources/validation-testing.md) | | Generating a migration summary | [migration-report.md](resources/migration-report.md) |
API-Driven Migration Workflow
Authentication
| Target | Token Audience | |---|---| | Synapse Data Plane (pipelines, datasets, linked services) | https://dev.azuresynapse.net | | Synapse ARM (global parameters, workspace properties) | https://management.azure.com | | Fabric REST API (create pipelines, connections, Variable Libraries) | https://api.fabric.microsoft.com |
> Use az account get-access-token --resource --query accessToken -o tsv to acquire tokens.
Synapse Data-Plane API Reference
| Operation | Endpoint | |---|---| | List all pipelines | GET https://{ws}.dev.azuresynapse.net/pipelines?api-version=2020-12-01 | | Get pipeline definition | GET https://{ws}.dev.azuresynapse.net/pipelines/{name}?api-version=2020-12-01 | | List all datasets | GET https://{ws}.dev.azuresynapse.net/datasets?api-version=2020-12-01 | | Get dataset definition | GET https://{ws}.dev.azuresynapse.net/datasets/{name}?api-version=2020-12-01 | | List all linked services | GET https://{ws}.dev.azuresynapse.net/linkedservices?api-version=2020-12-01 | | Get linked service | GET https://{ws}.dev.azuresynapse.net/linkedservices/{name}?api-version=2020-12-01 | | Get workspace (global parameters) | GET https://management.azure.com/subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.Synapse/workspaces/{ws}?api-version=2021-06-01 |
Fabric API Reference
| Operation | Endpoint | |---|---| | List connections | GET https://api.fabric.microsoft.com/v1/connections | | Create connection | POST https://api.fabric.microsoft.com/v1/connections | | Create pipeline item | POST https://api.fabric.microsoft.com/v1/workspaces/{wsId}/items | | Update pipeline definition | POST https://api.fabric.microsoft.com/v1/workspaces/{wsId}/items/{id}/updateDefinition | | Get pipeline definition | POST https://api.fabric.microsoft.com/v1/workspaces/{wsId}/items/{id}/getDefinition | | Create Variable Library | POST https://api.fabric.microsoft.com/v1/workspaces/{wsId}/items (type: VariableLibrary) | | List notebooks in workspace | GET https://api.fabric.microsoft.com/v1/workspaces/{wsId}/notebooks |
Assessment Mode (Optional but Recommended)
Before creating any items in Fabric, run the pipeline assessment to understand scope, complexity, and blockers. The assessment is read-only — it queries Synapse APIs only and produces a markdown report.
Copilot workflow — no Python script file needed:
- Ask the user: "What is the name of your Synapse workspace?"
- Auto-discover subscription ID and resource group via
az account showandaz synapse workspace show - Run the assessment code inline from the terminal
- Print the full report output directly in the chat
| When to Use | Action | |---|---| | User wants to understand migration scope before committing | Ask for workspace name → load [pipeline-assessment.md](resources/pipeline-assessment.md) → run inline | | User asks "what will and won't migrate?" | Run assessment, present the Executive Summary section | | User asks for a migration plan or scoping document | Run assessment, print report in chat | | User has already decided to migrate | Skip assessment — go straight to Migration Phases below |
> To also save the report to disk, pass output_path=f"pipeline-assessment-{SYNAPSE_WS}.md" to generate_assessment_report(). The PipelineAssessment objects it produces feed directly into the migration scripts in [pipeline-orchestrator.md](resources/pipeline-orchestrator.md).
Migration Mode (Inline — No Script File Required)
Copilot performs the migration directly from the terminal. No Python files to save or run manually.
Ask the user for:
- Synapse workspace name (reuse from assessment if already run)
- Fabric workspace name
- Which pipelines to migrate — specific names, or
*for all - Optional name suffix to append to each pipeline in Fabric (e.g.
_migrated) — leave blank to keep the original name
Everything else is auto-discovered:
- Subscription ID and resource group via
az account show+az synapse workspace show - Fabric workspace ID via
GET /v1/workspacesfiltered by display name - Notebook GUIDs in Fabric via
GET /v1/workspaces/{wsId}/notebooks(required forSynapseNotebook → TridentNotebook) - Connection names in Fabric via
GET /v1/connections(when datasets reference linked services)
What is fully automated inline:
- ✅
SynapseNotebook→TridentNotebook— type rename, GUID lookup, removesparkPool/sessionConfiguration, fix timeout to 12h max - ✅ All compatible activity types — pass through with minor property adjustments
- ✅ Dataset inlining into activity
typeProperties - ✅ Global parameter expressions rewritten to
@pipeline().libraryVariables. - ✅ Pipeline JSON assembly and deployment to Fabric via REST
Copilot checks before starting — will pause and report if:
- A notebook referenced by a
SynapseNotebookactivity does not exist in the Fabric workspace yet - A Fabric Connection is missing for a linked service referenced by dataset activities
> Load [pipeline-orchestrator.md](resources/pipeline-orchestrator.md) for the complete inline runner.
Migration Phases (Execute in Order)
| Phase | Source | Target | Resource | |---|---|---|---| | Phase 0 | Synapse notebooks (referenced by pipeline activities) | Fabric Notebooks | synapse-migration skill | | Phase 1 | Synapse global parameters | Fabric Variable Library | [global-parameters-to-variable-library.md](resources/global-parameters-to-variable-library.md) | | Phase 2 | Synapse linked services | Fabric Connections | [linked-service-to-connection.md](resources/linked-service-to-connection.md) | | Phase 3 | Synapse datasets | Inlined into activities | [dataset-inlining.md](resources/dataset-inlining.md) | | Phase 4 | Synapse pipeline activities | Fabric pipeline activities | [activity-mapping.md](resources/activity-mapping.md) + [notebook-activity-migration.md](resources/notebook-activity-migration.md) | | Phase 5 | Assembled pipeline JSON | Fabric DataPipeline item | [pipeline-orchestrator.md](resources/pipeline-orchestrator.md) | | Final | — | Validation | [validation-testing.md](resources/validation-testing.md) |
> Phase 0 must precede Phase 4: Fabric Notebook GUIDs are needed before TridentNotebook activities can be written. > Phase 2 must precede Phase 3: Connection names must exist before they can be referenced in inlined datasets.
Activity Type Quick Reference
Full mapping table, before/after examples, and parking decisions are in [activity-mapping.md](resources/activity-mapping.md).
| Synapse Activity | Fabric Equivalent | Status | |---|---|---| | SynapseNotebook | TridentNotebook | ✅ Migrated — see [notebook-activity-migration.md](resources/notebook-activity-migration.md) | | Copy | Copy | ✅ Migrated — datasets inlined | | Lookup | Lookup | ✅ Migrated — datasets inlined | | GetMetadata | GetMetadata | ✅ Migrated — datasets inlined | | Validation | GetMetadata + IfCondition | ✅ Migrated — split into 2 activities | | ForEach | ForEach | ✅ Compatible | | IfCondition | IfCondition | ✅ Compatible | | Switch | Switch | ✅ Compatible | | Until | Until | ✅ Compatible | | Wait | Wait | ✅ Compatible | | Fail | Fail | ✅ Compatible | | SetVariable | SetVariable | ✅ Compatible | | AppendVariable | AppendVariable | ✅ Compatible | | ExecutePipeline | ExecutePipeline | ✅ Compatible — add workspaceId | | WebActivity | WebActivity | ✅ Compatible | | Script | Script | ✅ Compatible — update connection refs | | Delete | Delete | ✅ Migrated — datasets inlined | | Filter | Filter | ✅ Compatible | | SparkJobDefinition (Synapse SJD) | SparkJobDefinition | ✅ Update GUID refs | | HDInsightSpark | TridentNotebook or SparkJobDefinition | ⚠️ Rewrite required | | AzureMLBatchExecution | WebActivity | ⚠️ Rewrite as REST call | | AzureFunctionActivity | WebActivity | ⚠️ Rewrite — use function URL + key | | DatabricksNotebook | ⛔ Parked | See [pipeline-gotchas.md](resources/pipeline-gotchas.md) | | DatabricksSparkJar | ⛔ Parked | See [pipeline-gotchas.md](resources/pipeline-gotchas.md) | | DatabricksSparkPython | ⛔ Parked | See [pipeline-gotchas.md](resources/pipeline-gotchas.md) | | ExecuteSSISPackage | ⛔ Parked | See [pipeline-gotchas.md](resources/pipeline-gotchas.md) | | AzureBatch | ⛔ Parked | No Fabric equivalent | | Custom | ⛔ Parked | No Fabric equivalent |
Must / Prefer / Avoid
MUST DO
- Migrate notebooks before pipelines — Fabric TridentNotebook activities require notebook GUIDs, not names. Use the synapse-migration skill first
- Create Fabric Connections before building pipeline JSON — linked service names in Synapse become connection references in Fabric; you need the connection names before inlining datasets
- Inline all dataset definitions — Fabric Data Factory has no Dataset item type; all
inputs/outputsdataset properties must be embedded in each activity - Replace
@pipeline().globalParameters.with@pipeline().libraryVariables.after creating the Variable Library - Replace Validation activities with a
GetMetadata+IfConditionpair —Validationdoes not exist as an activity type in Fabric - Remove
sparkPoolandsessionConfigurationfrom migrated notebook activities — pool selection and session config belong in the Fabric Environment attached to the notebook
PREFER
- Variable Library with Value Sets for dev/test/prod environments — use
@pipeline().libraryVariables.with environment-specific Value Sets instead of pipeline-level parameters for environment promotion - Parameterized
notebookParametersover hardcoded values in TridentNotebook activities — mirrors Synapse parameterized notebook pattern - Test notebook activities individually before running the full migrated pipeline — notebook GUIDs are the most common source of failure
- OneLake Lakehouse sources/sinks for Copy activities where applicable — eliminates the need for external connections for data alrea
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: microsoft
- Source: microsoft/skills-for-fabric
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.