download
Download Instagram videos to a local path by providing the video URL and destination directory. Track progress and save content programmatically.
Instructions
Instagram downloader
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Download local path (e.g. /Users/project/vue, /Users/download) | |
| url | Yes | Instagram website address (e.g. https://www.instagram.com/p/DHvN6-xygmQ/, https://www.instagram.com/p/DHaq23Oy1iV/) |
Implementation Reference
- index.js:41-53 (handler)Handler function for the 'download' tool. Fetches Instagram video data using igdl, validates video URL, downloads the video via helper function, logs progress/errors, and returns success/error message.execute: async ({ url, path }, { log, reportProgress }) => { try { const data = await igdl(url); if (!data || !data[0]?.url) { throw new UserError("No downloadable video found."); } await downloadVideo(data[0].url, path, log, reportProgress); return 'Instagram download success'; } catch (e) { log.error(`Instagram download error: ${e.message}`); return 'Instagram download error'; } },
- index.js:36-40 (schema)Input schema for the 'download' tool using Zod, defining 'url' (Instagram post URL) and 'path' (local save directory).parameters: z.object({ url: z.string().describe("Instagram website address (e.g. https://www.instagram.com/p/DHvN6-xygmQ/, https://www.instagram.com/p/DHaq23Oy1iV/)") .url(), path: z.string().describe("Download local path (e.g. /Users/project/vue, /Users/download)"), }),
- index.js:33-54 (registration)Registration of the 'download' tool on the FastMCP server, including name, description, input schema, and execute handler.server.addTool({ name: "download", description: "Instagram downloader", parameters: z.object({ url: z.string().describe("Instagram website address (e.g. https://www.instagram.com/p/DHvN6-xygmQ/, https://www.instagram.com/p/DHaq23Oy1iV/)") .url(), path: z.string().describe("Download local path (e.g. /Users/project/vue, /Users/download)"), }), execute: async ({ url, path }, { log, reportProgress }) => { try { const data = await igdl(url); if (!data || !data[0]?.url) { throw new UserError("No downloadable video found."); } await downloadVideo(data[0].url, path, log, reportProgress); return 'Instagram download success'; } catch (e) { log.error(`Instagram download error: ${e.message}`); return 'Instagram download error'; } }, });
- index.js:9-29 (helper)Helper function to download video stream from URL to local file using axios and fs, generates hash-based filename, logs progress and errors.async function downloadVideo(url, saveDir, log) { try { log.info('Starting video download...', { url }); const response = await axios.get(url, { responseType: 'stream' }); const fileName = createHash('sha256').update(url).digest('hex').slice(0, 8) + '.mp4'; const savePath = path.join(saveDir, fileName); await new Promise((resolve, reject) => { const writer = fs.createWriteStream(savePath); response.data.pipe(writer); writer.on('finish', resolve); writer.on('error', reject); }); log.info(`Video download complete! File saved as: ${savePath}`); } catch (error) { log.error(`Failed to download video: ${error.message}`); } }