assets-store-mcp
Allows uploading, listing, inspecting metadata, deleting, and copying assets in Vercel Blob storage.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@assets-store-mcpupload my latest blog screenshot"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
assets-store-mcp
MCP server for managing personal assets (images for blog posts, articles, etc.) in Vercel Blob storage.
Tools
Tool | Description |
| Upload a local file to your personal assets store, returns public URL |
| List files with optional prefix filter and pagination |
| Get metadata of an asset (size, content type, upload time) |
| Delete one or more assets by URL |
| Copy an asset to a new path |
Related MCP server: S3-Compatible 3D Storage MCP Server
Setup
1. Get your Blob token
Go to your Vercel dashboard → Storage → your Blob store → .env.local tab, and copy the BLOB_READ_WRITE_TOKEN.
2. Configure in Claude Code
Add to your .mcp.json:
{
"mcpServers": {
"assets-store": {
"command": "npx",
"args": ["-y", "assets-store-mcp"],
"env": {
"BLOB_READ_WRITE_TOKEN": "your_token_here"
}
}
}
}Development
npm install
npm run dev # Run with tsx (no build needed)
npm run build # Compile TypeScriptPublishing
Tag a release to trigger automatic npm publish via GitHub Actions (OIDC, no token secret needed):
npm version patch # or minor / major
git push --follow-tagsAvailable Tools
5 toolsassets_copyC
Copy an asset to a new path in your personal assets store
| Name | Required | Description | Default |
|---|---|---|---|
| fromUrl | Yes | Source Vercel Blob URL to copy from | |
| toPathname | Yes | Destination path/filename in the blob store (e.g. 'images/copy.jpg') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action and destination; it does not mention overwrite behavior, whether the source must already exist in the store, authentication requirements, or the operation's result/return value. This is a significant gap for an operation that could mutate or fail in various ways.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant details. The verb and core object are front-loaded, and every word contributes to the essential purpose. It is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description does not cover return values, failure conditions, or edge cases like overwriting existing paths. It is adequate for understanding the basic action but lacks behavioral context needed for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both `fromUrl` and `toPathname` have descriptive text. The description adds minimal additional meaning beyond mentioning 'new path', which maps to `toPathname`. Baseline of 3 applies because the schema already documents parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Copy' with a clear resource ('an asset') and destination ('a new path in your personal assets store'). It is discernibly different from siblings like upload/delete, though it does not explicitly name an alternative to distinguish itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The phrase 'Copy an asset to a new path' implies a duplication scenario, but the description does not state exclusions, prerequisites, or comparative conditions against upload/delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_deleteA
Delete one or more assets from your personal assets store
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Array of Vercel Blob URLs to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Delete' — it does not mention that deletion is permanent, how missing or invalid URLs are handled, what the response looks like, or any permissions or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to understanding the tool's scope and operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, with one fully documented required parameter, so the description is adequate for basic invocation. However, with no annotations and no output schema, it omits important behavioral context such as permanence of deletion, error handling for invalid URLs, and return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents that 'urls' is an array of Vercel Blob URLs to delete. The tool description adds no further parameter-level meaning, but the baseline of 3 applies because the schema is self-sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete'), a clear resource ('assets'), and a scope ('your personal assets store'). This cleanly distinguishes it from siblings like assets_upload, assets_list, and assets_copy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Delete one or more assets from your personal assets store' provides clear context for when to use the tool. It does not explicitly name alternative tools or exclusions, but the operation is unambiguous among the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_headA
Get metadata of a specific asset by its URL (size, content type, upload time, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The Vercel Blob URL of the file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of signaling safe read-only behavior. It conveys that this is a metadata retrieval operation, but does not mention potential errors, authentication requirements, or behavior for missing/invalid URLs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence with no wasted words. The core action and resource are front-loaded, and the parenthetical examples add useful detail without bloating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter metadata lookup, the description is sufficient to invoke the tool correctly. It would benefit from noting error cases or return format, but those are not critical for this simple operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single 'url' parameter with 100% coverage. The description adds context that the URL is used to identify the asset and hints at the returned metadata fields, but does not add substantial parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('metadata of a specific asset'), and clearly identifies the input mechanism (URL). It is distinct from the sibling list/upload/delete/copy operations, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you have a specific asset URL and want its metadata, rather than listing or uploading assets. However, it does not provide explicit guidance on when not to use it or name alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_listA
List files in your personal assets store with optional prefix filtering and pagination
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 1000, max: 1000) | |
| cursor | No | Pagination cursor from a previous list call to get the next page | |
| prefix | No | Optional path prefix to filter results (e.g. 'images/', 'videos/2024/') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing the tool's behavior. It states a non-mutating 'List' operation scoped to the personal assets store, which is an important safety signal. It does not mention ordering, return payload, or edge cases, but these are minor for a simple read-only listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The descition is a single sentence that leads with the action and resource, then states the key optional behaviors. Every word adds value and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, three optional well-described params, and no output schema, the definition is adequate for an agent to invoke correctly. It could mention response shape, but 'List files' sufficiently implies a list result and the schema covers all calling specifics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all three parameters with detailed descriptions and 100% coverage. The description only restates 'optional prefix filtering and pagination' without adding new semantic detail. The baseline of 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "List files in your personal assets store." It also mentions optional prefix filtering and pagination, which clearly scopes the tool's behavior. The verb 'List' distinguishes it from the sibling tools assets_upload, assets_delete, assets_copy, and assets_head.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys when to use the tool: whenever you need to enumerate files in the personal assets store, with optional prefix narrowing and pagination. It does not explicitly name alternatives or state when not to use it, so it stops short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_uploadA
Upload a local file to your personal assets store (for blog posts, articles, etc.) and return the public URL
| Name | Required | Description | Default |
|---|---|---|---|
| pathname | No | Optional storage path/filename in the blob store (e.g. 'images/photo.jpg'). Defaults to the original filename. | |
| localPath | Yes | Absolute path to the local file to upload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the mutating upload action and the public-URL result, which is useful. However, it does not mention what happens on path collisions, overwrite behavior, size limits, or any other side effects beyond the basic upload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence conveys the action, destination, use case, and return value without waste. Every element serves a purpose and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple upload tool, the description covers the core invocation details: what to provide (localPath), where the file goes, and what is returned. The lack of overwrite or conflict semantics is a minor gap given the simplicity of the operation and the schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters, so the description need not repeat their semantics. It adds little beyond the schema, but the baseline of 3 is appropriate since the schema already documents the parameters clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Upload a local file'), the target resource ('your personal assets store'), and the key outcome ('return the public URL'). This distinguishes it from the sibling list/head/delete/copy tools by verb and purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context: uploading local files for blog posts, articles, and similar personal-asset needs. It does not explicitly name alternatives or exclusion criteria, but the sibling names make the distinction obvious and the context is sufficient for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.1- First observed
assets_copy - First observed
assets_delete - First observed
assets_head - First observed
assets_list - First observed
assets_upload
TDQS
Scored across 5 tools
Each tool targets a distinct operation: upload, list, head, delete, and copy. There is no meaningful overlap between them; even copy is clearly different from upload.
All tools follow the same assets_<verb> snake_case pattern. This makes the API predictable and easy for an agent to navigate.
Five tools is a well-scoped set for a personal assets store. Each tool covers a necessary capability without unnecessary bloat.
The tool surface covers the full lifecycle of managing assets: create, list, inspect metadata, copy, and delete. Since uploads return public URLs, a download tool is not necessary for the stated purpose.
Maintenance
Related MCP Connectors
Persistent file storage for AI agents via MCP and curl. Upload, download, and version files.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Butterbase MCP server — manage your backend: schemas, auth, functions, storage, RAG, deploys.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA lightweight MCP server for image processing and cloud uploads that automates resizing, converting, optimizing, and uploading images to services like AWS S3, Cloudflare R2, and Google Cloud Storage.17 npm18MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server for managing and publishing 3D files using S3-compatible storage providers like Cloudflare R2 and AWS S3. It enables users to upload models, generate interactive 3D viewers, and manage temporary access via presigned URLs.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables users to upload local files to S3-compatible storage and retrieve shareable public URLs. Files are automatically organized into unique UUID-based folders to prevent naming conflicts while preserving original filenames.5 npmMIT
- AlicenseNot gradedqualityDmaintenanceMCP server for UploadThing that lets AI assistants upload, list, and delete files on UploadThing's CDN via natural language. Runs as a Cloudflare Worker for always-on serverless access.5 npmMIT