Ciro Cesar Maciel — Free Tools

Free, no sign-in: favicons, web to Markdown, CSV to chart, text to speech, time zones, passwords.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
95%
命名质量
87%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~3,877token 数(工具定义)
~3.2 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 3.03%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "tools": {
      "url": "https://mcp.tools.ciromaciel.click/"
    }
  }
}

远程端点

https://mcp.tools.ciromaciel.click/streamable-http

它能做什么

工具清单

工具(6)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢generate_password(length, numbers, symbols)

Generates a strong random password with a cryptographically secure generator. WHEN TO USE: the user asks for a password or a random key. HOW IT WORKS: always uses upper and lower case letters; numbers and symbols are optional. Each selected kind of character appears at least once. length: 8 to 64 (default 16). RETURNS: password, the options used, and link — this tool's web page with the same options. The password is never in the link. Show the password to the user as it is; do not store it or repeat it elsewhere.

输入模式

{
  "type": "object",
  "properties": {
    "length": {
      "type": "integer",
      "minimum": 8,
      "maximum": 64,
      "default": 16,
      "description": "Number of characters, 8 to 64. Default 16."
    },
    "numbers": {
      "type": "boolean",
      "default": true,
      "description": "Include digits 0-9. Default true."
    },
    "symbols": {
      "type": "boolean",
      "default": true,
      "description": "Include symbols such as !@#$%. Default true. Set false for systems that reject symbols."
    }
  },
  "additionalProperties": false
}
🟢compare_timezones(zones, date, hour, format)

Converts one moment across several time zones, daylight saving time included. WHEN TO USE: "what time is it in…", scheduling a meeting across cities, checking whether a time falls at night or on another day somewhere. HOW IT WORKS: - zones: IANA time zone names in Area/City form — America/Sao_Paulo, Europe/Lisbon, Asia/Tokyo, UTC. Not city names alone, abbreviations (EST, BRT) or offsets (GMT-3). The FIRST zone is the reference for date and hour. 1 to 12 zones. - date (YYYY-MM-DD) and hour (0–23) are read in the first zone. Without them: the current moment. Only hour: that hour today in the first zone. Only date: that day at the current hour. - format: 24h (14:00) or 12h (2:00 PM). RETURNS: the moment in UTC and, for each zone, its local date, weekday, time, UTC offset and dayShift (+1 = next day, -1 = previous day, relative to the first zone). link: this tool's web page with the same comparison. ERRORS name the unknown zone or the invalid date; fix it and call again.

输入模式

{
  "type": "object",
  "properties": {
    "zones": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "An IANA time zone name, such as America/Sao_Paulo or Europe/London."
      },
      "minItems": 1,
      "maxItems": 12,
      "default": [
        "America/Sao_Paulo",
        "America/New_York",
        "Europe/London"
      ],
      "description": "IANA time zone names, such as America/Sao_Paulo or Europe/London. The first one is the reference. 1 to 12."
    },
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "The day, as YYYY-MM-DD, in the first time zone. Defaults to today there."
    },
    "hour": {
      "type": "integer",
      "minimum": 0,
      "maximum": 23,
      "description": "The hour, 0 to 23, in the first time zone. Defaults to the current hour there."
    },
    "format": {
      "type": "string",
      "enum": [
        "24h",
        "12h"
      ],
      "default": "24h",
      "description": "How times are written: 24h (14:00) or 12h (2:00 PM)."
    }
  },
  "additionalProperties": false
}
🟢data_to_chart(chartType, csv, title)

Draws a chart from a CSV table and returns it as an image. WHEN TO USE: the user wants to see data as a chart, or needs a chart image for a document, a README, a slide or a chat. HOW IT WORKS: - csv: a header row, then data rows. First column: the category (or x value); the next columns: numbers. Use a comma or semicolon as separator; decimals with a point, or with a comma when the separator is a semicolon. Up to 20,000 characters. - chartType, and what each one needs: bar, horizontalBar, line, area, pie, donut, funnel — one category column + one numeric column; multiline — one x column + one or more numeric columns (one line per column); scatter — two numeric columns (x, y); heatmap — three columns: row, column, value. - title: optional, drawn at the top. RETURNS: - image: a PNG address that IS the chart (rendered on request) — put it straight into Markdown (![title](image)) or an <img>. imageSvg: the same as SVG, sharper where SVG is accepted. Both are null when the CSV is too long to fit in an address; then use svg. - svg: the chart as SVG markup. - link: this tool's web page with the same chart, to edit it. ERRORS say what is wrong with the CSV (missing columns, non-numeric values, too many rows); fix the data and call again.

输入模式

{
  "type": "object",
  "properties": {
    "chartType": {
      "type": "string",
      "enum": [
        "bar",
        "horizontalBar",
        "line",
        "multiline",
        "area",
        "pie",
        "donut",
        "scatter",
        "funnel",
        "heatmap"
      ],
      "default": "bar",
      "description": "The kind of chart. See the tool description for the columns each kind needs."
    },
    "csv": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20000,
      "description": "The data as CSV with a header row. First column: category or x value; next columns: numbers. Up to 20,000 characters."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "default": "",
      "description": "Optional title drawn at the top of the chart. Empty for none."
    }
  },
  "required": [
    "csv"
  ],
  "additionalProperties": false
}
🟢text_to_speech(text, voice, speed)

Reads a text aloud with a Microsoft neural voice (the voices of Edge's "Read aloud") and returns an MP3. WHEN TO USE: the user wants to hear a text or needs an audio file of it — narration, audiobook, lesson, voice-over, a message read aloud. HOW IT WORKS: - Up to 50,000 characters per call. A text over 1,000 characters is split by sentence into parts of up to 1,000; each part is voiced in order and the parts are joined into ONE MP3. Progress is reported per part ("Gerando áudio... 3 de 18"), so keep waiting while it arrives. - It takes time: about 5 seconds per part. 5,000 characters ≈ 30 s; 16,000 ≈ 2 min; 50,000 ≈ 6 min. - Over 50,000 characters: split the text at paragraph boundaries into several calls with the same voice and speed, and give the user every link, in order. - Send the text as it should be HEARD: remove Markdown marks (**, #, list bullets), URLs, emojis and tables. Do not summarize, translate or reword unless the user asked — every word you send is read. - voice: choose one in the language of the text (the prefix is language-region: pt-BR, pt-PT, en-US, es-MX…). Brazilian Portuguese: pt-BR-FranciscaNeural (female, default) or pt-BR-AntonioNeural (male). - speed: 1 is the voice's natural pace; 0.9 suits calm narration, 1.2 a quick read. RETURNS: - audioUrl: the complete MP3 to download, valid for 7 days. Always give this link to the user. If you can run commands, you can download it (e.g. curl -o audio.mp3 <audioUrl>). - audio: the MP3 itself, only when it is short (about 1.5 minutes or less); otherwise null. - seconds (duration), parts, characters, voice, speed. - link: this tool's web page with the same voice and speed (the text is not in it). ERRORS say what happened and what to do next. If a part fails, no audio is produced and a new call starts again from part 1.

输入模式

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 50000,
      "description": "The text to read aloud: 1 to 50,000 characters. Plain text as it should be heard — no Markdown, URLs or emojis. Longer texts: split into several calls."
    },
    "voice": {
      "type": "string",
      "enum": [
        "pt-BR-FranciscaNeural",
        "pt-BR-AntonioNeural",
        "pt-PT-RaquelNeural",
        "pt-PT-DuarteNeural",
        "en-US-AriaNeural",
        "en-US-JennyNeural",
        "en-US-GuyNeural",
        "en-US-ChristopherNeural",
        "en-GB-SoniaNeural",
        "en-GB-RyanNeural",
        "en-GB-LibbyNeural",
        "en-AU-NatashaNeural",
        "en-AU-WilliamNeural",
        "es-ES-ElviraNeural",
        "es-ES-AlvaroNeural",
        "es-MX-DaliaNeural",
        "es-MX-JorgeNeural",
        "fr-FR-DeniseNeural",
        "fr-FR-HenriNeural",
        "fr-CA-SylvieNeural",
        "fr-CA-JeanNeural",
        "de-DE-KatjaNeural",
        "de-DE-ConradNeural",
        "it-IT-ElsaNeural",
        "it-IT-DiegoNeural",
        "ja-JP-NanamiNeural",
        "ja-JP-KeitaNeural",
        "zh-CN-XiaoxiaoNeural",
        "zh-CN-YunxiNeural",
        "ko-KR-SunHiNeural",
        "ko-KR-InJoonNeural",
        "ru-RU-SvetlanaNeural",
        "ru-RU-DmitryNeural",
        "hi-IN-SwaraNeural",
        "hi-IN-MadhurNeural",
        "ar-SA-ZariyahNeural",
        "ar-SA-HamedNeural",
        "nl-NL-ColetteNeural",
        "nl-NL-MaartenNeural",
        "sv-SE-SofieNeural",
        "sv-SE-MattiasNeural",
        "nb-NO-PernilleNeural",
        "nb-NO-FinnNeural",
        "da-DK-ChristelNeural",
        "da-DK-JeppeNeural",
        "pl-PL-ZofiaNeural",
        "pl-PL-MarekNeural",
        "tr-TR-EmelNeural",
        "tr-TR-AhmetNeural"
      ],
      "default": "pt-BR-FranciscaNeural",
      "description": "A Microsoft neural voice; one of the listed ids. Pick one in the text's language — the prefix is language-region (pt-BR, en-US, es-MX…). Default: pt-BR-FranciscaNeural."
    },
    "speed": {
      "type": "number",
      "minimum": 0.5,
      "maximum": 2,
      "default": 1,
      "description": "Reading speed, 0.5 to 2. 1 is the voice's natural pace; 0.9 calm narration; 1.25 a quick read."
    }
  },
  "required": [
    "text"
  ],
  "additionalProperties": false
}
🟢generate_favicon(mode, text, emoji, font, weight, ...)

Generates a complete favicon set from 1 to 3 characters (initials) or one emoji. WHEN TO USE: the user needs a favicon, tab icon, apple-touch-icon or web app icon for a website or web app, or the project still has a framework's default icon. PRIORITY: if the host also provides open_favicon_editor, call that editor first for every normal favicon request (create, preview, adjust or download). Use this data tool directly only when the user explicitly asks for files, SVG, head tags or installation text to write into a code project. HOW IT WORKS: mode text draws the characters in any Google Font as vector paths (no font dependency); mode emoji draws one Twemoji emoji as vectors, with a margin. Both sit inside a shape. With adaptive=true the SVG swaps its colors when the browser is in dark mode. Pass framework to get where each file goes. For a logo or other picture, use open_favicon_editor with mode=image when available: the user chooses the image in its private file picker. Otherwise return the link with mode=image; do not process a chat attachment as an image favicon here. RETURNS: svg (write it to disk exactly as given), files (each with path and url: download the binaries with curl -o), manifest (path and content), html (the head tags; null on Next.js App Router), inline (the whole favicon as one <link> tag, no files), install (steps for the framework), warnings, credit (emoji only), and link (this tool's web page with the same options, to adjust and preview).

输入模式

{
  "type": "object",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "text",
        "emoji",
        "image"
      ],
      "default": "text",
      "description": "text: initials. emoji: one emoji. image: only on the web page; the call returns the link for the user."
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 3,
      "default": "CM",
      "description": "Mode text: 1 to 3 characters. Latin letters (accents ok), digits and & @ # + . - !. Two characters read best at 16 px."
    },
    "emoji": {
      "type": "string",
      "default": "🚀",
      "description": "Mode emoji: one emoji, as the character itself (🚀, 🦊, ☕)."
    },
    "font": {
      "type": "string",
      "default": "Montserrat",
      "description": "Mode text: any Google Font family, by its name (Montserrat, Inter, Lobster). Heavy sans-serif families read best at 16 px."
    },
    "weight": {
      "type": "integer",
      "minimum": 100,
      "maximum": 900,
      "default": 800,
      "description": "Mode text: font weight. The closest weight the family has is used. 700 or more reads best."
    },
    "size": {
      "type": "integer",
      "minimum": 30,
      "maximum": 96,
      "default": 80,
      "description": "Mode text: the characters fit in a square this percentage of the icon (the longer side decides)."
    },
    "margin": {
      "type": "integer",
      "minimum": 0,
      "maximum": 30,
      "default": 8,
      "description": "Mode emoji: space between the emoji and the edge, as a percentage of the icon on each side."
    },
    "shape": {
      "type": "string",
      "enum": [
        "square",
        "rounded",
        "circle",
        "outline",
        "none"
      ],
      "default": "square",
      "description": "Container: filled square, rounded square, circle, outlined square, or none (transparent)."
    },
    "background": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{6}$",
      "default": "141414",
      "description": "Container color, hex without #. With shape outline or none, the color of the characters in light mode."
    },
    "color": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{6}$",
      "default": "ffffff",
      "description": "Character color, hex without #. With shape outline or none, the color of the characters in dark mode."
    },
    "adaptive": {
      "type": "boolean",
      "default": true,
      "description": "Swap the colors when the browser is in dark mode (SVG only; PNG and ICO stay light)."
    },
    "framework": {
      "type": "string",
      "enum": [
        "html",
        "nextjs",
        "vite",
        "astro",
        "nuxt"
      ],
      "default": "html",
      "description": "Where the files will live; changes install, html and the file paths only."
    }
  },
  "additionalProperties": false
}
🟢web_to_markdown(url, pages, onlyMainContent)

Fetches a public web page and returns its content as clean Markdown. WHEN TO USE: you need to read a page — documentation, an article, a product page — to answer, summarize or quote it; or the user wants a page as Markdown. HOW IT WORKS: - url: a public http(s) address. Private networks, localhost and addresses with credentials are refused. - Reads the HTML the server sends (like a simple browser, without running JavaScript). Pages that build their content with JavaScript have no text to convert — the error says so. - onlyMainContent (default true) drops menus, headers, footers, sidebars, cookie banners and ads. Set false to keep the whole page. - pages above 1 also follows links on the same site (same folder and below), breadth-first, up to that many pages (max 20), respecting robots.txt. Slower: a few seconds per page. - Limits per page: 15 seconds and 5 MB. PDFs and non-HTML files are not converted. RETURNS: for each page, its Markdown with absolute links and images, plus title, description and language when the page has them; pages that failed are listed with the reason. link: this tool's web page with the same request. ERRORS say why the page could not be read and whether retrying makes sense.

输入模式

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "The page to convert: a public http or https address."
    },
    "pages": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 1,
      "description": "How many pages of the same site to convert, 1 to 20, starting at url and following its links. 1 (default) converts only url."
    },
    "onlyMainContent": {
      "type": "boolean",
      "default": true,
      "description": "true (default): keep only the content, without menus, footers, sidebars, cookie banners and ads. false: the whole page."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}

社区

评价此服务器

证据

最近观测

已验证未记录版本6 个工具
已验证未记录版本5 个工具