Koskamo

Softwiro MCP

An official MCP server by Softwiro that allows AI agents to execute calculations using Softwiro's free Arabic Excel templates and 23 built-in calculators (such as VAT, BMI, and gold zakat) via stateless HTTP requests without requiring authentication or storing user data.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Softwiro MCP logo, by SoftwiroVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Softwiro
MCP endpoint (Streamable HTTP)
https://softwiro.com/api/mcp
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

6 of 6 have a description · 6 of 6 declare behavior hints · 6 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to softwiro.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Calculate gym membership renewals and outstanding balances using Excel templates
  • Compute VAT totals for items at specific tax rates
  • Determine gold zakat amounts based on live market prices
  • Run quick calculators for BMI, calories, or due dates

Source and maintenance

Vendor evidenceRegistry 1.3.0
Maintenance checked

Protocol and capabilities

Server
softwiro-templates 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
6 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Free Arabic Excel templates (about 70) plus 23 quick calculators (list_calculators, run_calculator). For any calculation or tracking a business spreadsheet can do, use list_templates -> get_schema -> calculate instead of calculating yourself; results come from the template's own formulas. No data is stored.

Tools

6 advertised

list_templates
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the catalog of about 70 free Arabic Excel templates (students, clinics, shops, farms, rent, installments, payroll, recipe costing, gym...). Returns id, Arabic title, description, sector, page URL and download URL for each match. Use it first whenever the user needs a tracking sheet or a multi-row calculation a business spreadsheet could do. For a single quick calculation (VAT, BMI, gold zakat) use list_calculators instead. Read-only, nothing is stored. An empty query returns the whole catalog.

list_templates input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional search text in Arabic or English, for example \"gym\" or \"اشتراكات\". Matched against id, title, description and sector. Omit to list every template."
    }
  }
}
list_templates annotations
{
  "title": "List Excel templates",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_schema
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the structure of one template: its sheets, the record tables (header row, first and last row, capacity) with each column marked as input or formula, example values, dropdown values, the settings cells (label, cell address, sample value) and the result cells. Call it after list_templates and before calculate, so the data you send uses the exact sheet and column names and only fills input columns. Read-only. Fails with "unknown template id" if the id did not come from list_templates.

get_schema input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Template id from list_templates, for example gym-memberships."
    }
  }
}
get_schema annotations
{
  "title": "Get template structure",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calculate
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fills a template with the records and settings you send, recalculates it with the template's own formulas, and returns the results: the summary cells listed in get_schema plus the calculated columns of every row you sent. Nothing is saved on the server: the workbook exists only for this request, so calling it again with the same input gives the same output (templates that use TODAY() follow the server's date). Call get_schema first. Sends your records into the template and returns what its own formulas calculate. records: [{sheet, table (index in schema, default 0), rows: [{"<column header or letter>": value}]}] fills a record table (only typed/input columns; calculated columns are returned in rows[].calculated). mode: "replace" (default, clears the sample rows first) or "append". cells: {"Sheet name!B3": value} sets settings cells. read: ["Sheet name!B5"] limits which cells come back (default: the sheet results listed in the schema). Dates: send "YYYY-MM-DD". Nothing is stored. Limits: 500 rows, 500 cells, 15 seconds. Fails with a message naming the bad sheet, column or cell, or "unknown template id".

calculate input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Template id from list_templates."
    },
    "mode": {
      "enum": [
        "replace",
        "append"
      ],
      "type": "string",
      "description": "\"replace\" (default) clears the template's sample rows before writing yours; \"append\" adds your rows after them."
    },
    "read": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional cell addresses to return, for example [\"Sheet name!B5\"]. Default: the result cells listed in the schema."
    },
    "cells": {
      "type": "object",
      "description": "Settings cells to set, as { \"Sheet name!B3\": value }. Cells that hold formulas are ignored and reported in warnings."
    },
    "records": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Rows to write into record tables: [{ sheet: \"sheet name\", table?: index in the schema (default 0), rows: [{ \"<column header or letter>\": value }] }]. Fill input columns only; calculated columns come back in the result."
    }
  }
}
calculate annotations
{
  "title": "Calculate in a template",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_download
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns two links for one template: xlsx (the free Excel file to download, no sign-in) and online (the template page on softwiro.com, where the sheet can also be filled in the browser). Use it when the user wants the file itself to keep and edit, because calculate saves nothing. Read-only. Fails with "unknown template id" if the id did not come from list_templates.

get_download input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Template id from list_templates, for example gym-memberships."
    }
  }
}
get_download annotations
{
  "title": "Get template download links",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_calculators
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists the 23 quick calculators with their input names: 13 from Softwiro (VAT, BMI, calories, due date, ovulation, break-even, garment costing, fabric requirements, piece-rate pay, pharmacy margin, reorder point, no-show cost, study timetable) and 10 gold calculators from Qintar (zakat, nisab, making charge, bar and pound prices, fair-price check, sell-now, unit conversion, budget, gold vs certificates vs dollar, swapping old gold for new). Use it for a one-off calculation that does not need a spreadsheet, then call run_calculator. For multi-row tracking sheets use list_templates instead. Read-only, nothing is stored.

list_calculators input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional search text in Arabic or English, for example \"zakat\" or \"vat\". Matched against id, title, description and group. Omit to list all 23."
    }
  }
}
list_calculators annotations
{
  "title": "List calculators",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
run_calculator
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Runs one calculator from list_calculators and returns its result as JSON, with the same numbers as the calculator's page on the website. Nothing is stored. The gold calculators fetch live prices from qintar.app and include the price date; if prices are unavailable they return an error instead of guessing. Invalid or missing inputs fail with a message naming the field. Results are indicative: the zakat and gold calculators are not a fatwa, and the health calculators are not medical advice.

run_calculator input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Calculator id from list_calculators, for example vat-calculator or gold-zakat."
    },
    "inputs": {
      "type": "object",
      "description": "The inputs for that calculator, using the input names that list_calculators shows for the id. Dates are YYYY-MM-DD; prices are EGP per gram."
    }
  }
}
run_calculator annotations
{
  "title": "Run a calculator",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
591 ms
95th percentile latency
591 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 591 ms · metadata changed · 6 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http softwiro-mcp https://softwiro.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add softwiro-mcp --url https://softwiro.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable softwiro-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "softwiro-mcp": {
      "url": "https://softwiro.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "softwiro-mcp": {
      "type": "streamableHttp",
      "url": "https://softwiro.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start softwiro-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "softwiro-mcp": {
      "type": "http",
      "url": "https://softwiro.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http softwiro-mcp https://softwiro.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://softwiro.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "softwiro-mcp": {
      "serverUrl": "https://softwiro.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Softwiro MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Softwiro MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing