copy_between_sites
Copy a course's content from one of this server's sites to another (list_sites): some activities (activityIds), some sections with everything in them (sectionIds), or, with neither, the whole course. Through Moodle's backup on the first site and its restore on the second, never with people's data...
This record as markdown: /tools/falkenslab-moodle-mcp/copy-between-sites.md
What copy_between_sites does on Moodle
AI agents use copy_between_sites to create or update resources in Moodle, usually the action step of a workflow, after the agent has gathered context. Every call changes real data in your Moodle environment.
| Parameter | Type | Required | Description |
|---|---|---|---|
toSite | string | Yes | A site's name, as list_sites gives it |
courseId | integer | Yes | The course to copy from, on fromSite |
fromSite | string | Yes | A site's name, as list_sites gives it |
sectionIds | array | — | Only these sections, by id, each with everything in it |
toCourseId | integer | — | An existing course on toSite to copy into |
activityIds | array | — | Only these activities and resources, by course module id |
toSectionId | integer | — | Into toCourseId: every copied activity at the end of this section |
toCategoryId | integer | — | A whole course only: a new course in this category on toSite, instead of toCourseId |
toAfterSectionId | integer | — | Into toCourseId: copied sections as new sections after this one |
Parameters from the server's own tool schema.
Why copy_between_sites is rated Medium
An AI agent can call copy_between_sites faster than any human can review: one bad instruction and it creates or modifies resources in Moodle by the hundred, each call as confident as the last.
Risk signalsBulk/mass operation — affects multiple targets
Attacks that exploit this kind of access
The rule that runs copy_between_sites safely
PolicyLayer is an MCP gateway: it sits between your AI agents and Moodle, and checks every tool call against a rule you set before the call runs. Nothing changes on the server itself. For copy_between_sites, this is the rule to start with:
copy_between_sites stays usable, but capped: an agent stuck in a loop can't make hundreds of changes a minute. Everything else on the server is denied unless you say otherwise.
The button opens the PolicyLayer dashboard: create your workspace, connect Moodle, apply this rule, and every copy_between_sites call is checked against it from then on.
Questions about copy_between_sites
Copy a course's content from one of this server's sites to another (list_sites): some activities (activityIds), some sections with everything in them (sectionIds), or, with neither, the whole course. Through Moodle's backup on the first site and its restore on the second, never with people's data and naming no one; the file stays on this computer, never passes through you, and is deleted after. It goes into an existing course (toCourseId): at the end of one of its sections (toSectionId), or, for sections, as new ones after toAfterSectionId; a whole course can go into a new course in a category instead (toCategoryId). Returns what was created, and warnings for what was left broken (restrictions or links to what wasn't copied) for the person to fix. Each site needs a session (use_site, then login). The active site stays the same. Within one site, use import_activities or copy_course. It can take minutes. Changes the target site: confirm with the person first. It is categorised as a Write tool in the Moodle MCP Server, which means it can create or modify data. Consider rate limits to prevent runaway writes.
copy_between_sites accepts 9 parameters: toSite, courseId, fromSite, sectionIds, toCourseId, activityIds, toSectionId, toCategoryId, toAfterSectionId. Required: toSite, courseId, fromSite. The full parameter table on this page comes from the server's own tool schema.
Register the Moodle MCP server in PolicyLayer and add a rule for copy_between_sites: allow, deny, rate-limit, or require approval. Point your MCP client at the PolicyLayer proxy URL and the rule is enforced on every call, before it reaches Moodle. Nothing to install.
copy_between_sites is a Write tool with medium risk. Write tools should be rate-limited to prevent accidental bulk modifications.
Yes. Add a rate_limit block to the copy_between_sites rule in your PolicyLayer policy. For example, setting max: 10 and window: 60 limits the tool to 10 calls per minute. Rate limits are tracked per agent session and reset automatically.
Set action: deny in the PolicyLayer policy for copy_between_sites. The AI agent will receive a policy violation error and cannot call the tool. You can also include a reason field to explain why the tool is blocked.
copy_between_sites is provided by the Moodle MCP server (@falkenslab/moodle-mcp). PolicyLayer sits as a proxy in front of this server to enforce policies before tool calls reach the server.
More on Moodle, and thousands of servers like it.
This server
Across the catalogue