picoli-mcp
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., "@picoli-mcpShorten https://example.com/long-article"
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.
picoli-mcp
MCP server for picoli.site — URL shortening and click analytics for AI agents.
Shorten URLs, track clicks, and analyze link performance directly from your AI assistant.
Setup
1. Get your API key
Create an account at picoli.site and get your API key from the dashboard.
2. Configure your MCP client
Claude Desktop / Claude Code
Add to your MCP configuration:
{
"mcpServers": {
"picoli": {
"command": "npx",
"args": ["-y", "picoli-mcp"],
"env": {
"PICOLI_API_KEY": "your-api-key-here"
}
}
}
}Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"picoli": {
"command": "npx",
"args": ["-y", "picoli-mcp"],
"env": {
"PICOLI_API_KEY": "your-api-key-here"
}
}
}
}Related MCP server: DWZ Short URL MCP Server
Tools
shorten_url
Create a short URL with an optional custom slug.
Example prompts:
"Create a short link for https://my-site.com with slug 'launch'"
shorten_urls
Create multiple short URLs at once (up to 500).
Example prompts:
"Shorten these 3 URLs: ..."
get_link_stats
Get click statistics for specific links (bot traffic excluded).
Example prompts:
"How many clicks did my 'launch' link get?"
"Show me stats for these slugs: launch, demo, blog-post"
list_links
List all shortened URLs with click counts and pagination.
Example prompts:
"Show me all my short links"
"List my links sorted by clicks"
get_analytics
Get analytics overview: top 10 links, daily click trends, and totals.
Example prompts:
"Show me my link analytics for this week"
"What are my top performing links?"
"Give me click stats from 2026-01-01 to 2026-01-31"
Environment Variables
Variable | Required | Default | Description |
| Yes | — | Your picoli.site API key |
| No |
| API base URL (for self-hosted instances) |
Development
git clone https://github.com/yun/picoli-mcp.git
cd picoli-mcp
npm install
npm run buildTest locally:
PICOLI_API_KEY=your-key npx tsx src/index.tsLicense
MIT
Available Tools
5 toolsget_analyticsGet AnalyticsA
Get analytics overview: top 10 links by clicks, daily click stats, and total link count. Defaults to last 7 days.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End date in YYYY-MM-DD format (default: today) | |
| start_date | No | Start date in YYYY-MM-DD format (default: 7 days ago) |
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. It discloses the default date range (last 7 days), which is useful behavioral context, but does not clarify whether the operation is read-only, how date boundaries are handled, or any rate limits. This is a moderate disclosure level.
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, front-loaded sentence that clearly states the tool's purpose and outputs. Every word earns its place; there is no fluff or repetition.
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?
Despite lacking an output schema and annotations, the description is sufficient for a simple read-only analytics tool with only two optional date parameters. It names the exact outputs, which is adequate. Minor gaps like error behavior or timezone assumptions are not critical for this complexity level.
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% parameter description coverage for the two optional date parameters, so the schema already documents them. The description adds the default behavior ('Defaults to last 7 days') which reinforces but does not extend beyond the schema, so the baseline score of 3 is appropriate.
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 has a clear verb ('Get') and resource ('analytics overview'), and specifies what it returns: top 10 links by clicks, daily click stats, and total link count. It is unambiguous, though it does not explicitly differentiate from the sibling tool 'get_link_stats' in wording, the overview nature is implied.
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 usage for obtaining an analytics overview with a default 7-day window, but it provides no explicit guidance on when to use this tool versus alternatives like 'get_link_stats' or 'list_links'. No exclusions or alternative scenarios are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_link_statsGet Link StatsA
Get click statistics for one or more short links by their slugs. Returns human click counts (bot traffic excluded).
| Name | Required | Description | Default |
|---|---|---|---|
| slugs | Yes | Array of slugs to get stats for (e.g. ['my-link', 'abc123']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral aspects. It discloses that bot traffic is excluded, providing a key detail about the data quality. However, it does not mention response format, error conditions, or any access requirements.
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?
Two sentences, no fluff. The first sentence states the core function, and the second adds a meaningful data-quality note. Highly efficient.
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 one-parameter getter, the description covers purpose, input, and a key output characteristic. It lacks an explicit response structure, but given the simplicity, the provided info is largely sufficient.
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 fully documents the 'slugs' parameter with description, constraints, and examples. The description adds no additional parameter details beyond reiterating 'by their slugs', so baseline 3 applies.
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: retrieving click statistics for specific short links identified by slugs. The phrase 'by their slugs' differentiates it from broader analytics tools like get_analytics and from link creation tools.
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 context is clear: use this when you have slug(s) and need click metrics. It does not explicitly mention alternatives or exclusions, but the specificity of the input and purpose implies the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linksList LinksA
List all shortened URLs with their click counts. Supports pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| limit | No | Items per page (default: 20, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the return content (shortened URLs with click counts) and pagination, but does not disclose ordering, rate limiting, or whether the 'all' list is limited. This is adequate but not rich.
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 two sentences, front-loaded with the core action, and contains no filler or redundant information.
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 list tool with well-documented parameters, the description is fairly complete: it explains what is returned and that pagination is available. It does not detail the exact response shape or edge cases, but given the low complexity and absence of an output schema, it is sufficiently complete.
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 coverage is 100% with clear descriptions for page and limit, so the baseline is 3. The description only adds 'supports pagination,' which does not meaningfully enhance what the schema already provides.
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 ('List') and clarifies the resource ('shortened URLs') plus includes click counts and pagination, making its purpose distinct from the sibling tools that create URLs or provide analytics for individual links.
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 implies when to use this tool: when you want a paginated collection of shortened URLs with click counts rather than a single link's stats. It does not explicitly name alternatives or exclusions, but the usage context is evident from the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorten_urlShorten URLB
Create a short URL using picoli.site. Optionally specify a custom slug. Returns the shortened URL and slug.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The destination URL to shorten | |
| slug | No | Optional custom slug (e.g. 'my-link'). If not provided, a random slug is generated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the return value (shortened URL and slug) and the service used. However, it does not mention side effects, potential slug collisions, or any limitations, leaving some behavioral context unstated.
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 three concise sentences, front-loaded with the action, and each sentence adds necessary information. No wasted words.
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 two-parameter tool with no output schema, the description covers the core purpose, optional parameter, and return value. It could benefit from a note about single vs. batch usage, but overall it is sufficiently complete for a straightforward tool.
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 coverage is 100% with detailed descriptions for both 'url' and 'slug', so the baseline is 3. The description adds little beyond the schema—only reaffirming the optional slug and return value.
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 states the tool creates a short URL via picoli.site and mentions the optional slug. However, it does not explicitly distinguish itself from the sibling tool 'shorten_urls', so it falls short of a 5.
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?
Provides no guidance on when to use this tool versus alternatives like 'shorten_urls'. The description only states what the tool does, not when it should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorten_urlsShorten Multiple URLsA
Create multiple short URLs at once (up to 500). Each URL can have an optional custom slug.
| Name | Required | Description | Default |
|---|---|---|---|
| links | Yes | Array of URLs to shorten |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the 500-item limit and optional custom slug, but does not address error handling, partial failures, idempotency, or authentication requirements. Some behavioral context is added, but not comprehensive.
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, front-loaded sentence with no redundant words. It communicates the core action and key limit efficiently.
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 schema provides detailed input information, and the description conveys the batch scope. However, with no output schema, the description does not mention the return format or potential error behavior, leaving minor gaps for a batch creation tool.
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 provides 100% coverage of parameter descriptions (links, url, slug). The description only reiterates the optional slug, adding no significant semantic value beyond what the schema already states.
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 states the tool creates multiple short URLs at once, using the specific verb 'Create' and resource 'short URLs'. It distinguishes itself from the sibling 'shorten_url' by emphasizing 'Multiple' and 'up to 500'.
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 batch usage via 'at once' and 'up to 500', but does not explicitly mention the singular alternative 'shorten_url' or provide when-not-to-use guidance. The usage context is implied rather than directly stated.
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
get_analytics - First observed
get_link_stats - First observed
list_links - First observed
shorten_url - First observed
shorten_urls
TDQS
Scored across 5 tools
Each tool serves a distinct purpose: creating single vs bulk short URLs, retrieving stats for specific links, listing all links, and getting an analytics overview. No ambiguity between them.
All tool names follow a verb_noun snake_case pattern (shorten_url, shorten_urls, get_link_stats, list_links, get_analytics). The verbs and nouns are consistent and predictable.
With 5 tools, the set is well-scoped for a URL shortener API. Each tool covers a necessary function without unnecessary bloat or gaps.
Core operations are covered: creating (single and bulk), listing, and retrieving stats/analytics. Missing delete or update functionality, but this is a minor gap for a typical URL shortener use case.
Maintenance
Related MCP Connectors
Create and manage short links, track clicks, and automate URL management
Short-link service embedded in your AI workflow — shorten links, track campaigns, read stats.
Short links, QR images + tracking for agents. Docs free; tool calls need an account.
Create short links, QR codes, UTM templates, vCards, and landing pages from your AI assistant.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI agents to create, update, and manage short links through your Dub.co account, allowing for creation, modification, and deletion of custom shortened URLs.418 npmMIT
- AlicenseAqualityDmaintenanceEnables AI assistants to create, manage, and analyze short URLs through complete URL shortening functionality. Supports batch operations, custom domains, click statistics, and comprehensive link management.67 npm1MIT
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to the Clypt Link Intelligence platform to shorten URLs, manage tags, and generate QR codes. It enables users to view link analytics and perform bulk link operations through natural language commands.30 npmMIT
- AlicenseNot gradedqualityCmaintenanceAI-native URL shortener and paste handoff service for agents. Create short links, publish handoff pastes, resolve prior slugs, generate QR links, and find tagged artifacts across sessions.MIT