Ciro Cesar Maciel — Free Tools
Free, no sign-in: web page to Markdown, CSV to chart, text to speech, time zones and passwords.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"tools": {
"url": "https://mcp.tools.ciromaciel.click/"
}
}
}Remote endpoints
https://mcp.tools.ciromaciel.click/streamable-httpWhat it can do
Tool inventory
Tools (5)
🟢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.
Input Schema
{
"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.
Input Schema
{
"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 () 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.
Input Schema
{
"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.
Input Schema
{
"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
}🟢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.
Input Schema
{
"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
}Community
Evidence