Koskamo

Zovo Sign-In Sheets MCP

Generates print-ready PDFs for sign-in sheets, sign-up sheets, visitor logs, and attendance rosters. Supports custom columns, multiple page sizes, and various character sets for meeting, class, and volunteer scheduling.

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.

Zovo Sign-In Sheets MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-08Published by Zovo
You need:No sign-in is needed.
MCP endpoint (Streamable HTTP)
https://sign-in-sheet.zovo.one/mcp
Vendor documentation

What its tools do

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

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

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Create meeting and event sign-in sheets
  • Generate visitor logs with time in/out
  • Build class attendance rosters from name lists
  • Design volunteer sign-up sheets with time slots

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
sign-in-sheet 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
3 advertised
Resources
1 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

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

Zovo Sign-In Sheets makes print-ready sign-in sheets, sign-up sheets, visitor logs and attendance sheets as PDFs plus a CSV template. Use generate_sign_in_sheet for meeting or event sign-in sheets, visitor logs, contact or email sign-up sheets and weekly sign-in and out timesheets; generate_sign_up_sheet for volunteer time slot sign-ups and potluck item sign-ups; generate_attendance_sheet for class attendance rosters with names and dates. Call once with what the user gave, without asking follow-up questions for optional settings; defaults are stated in the result. Pass pasted name lists and item lists as given. Share the PDF and CSV links and remind the user to print at 100%.

Tools

3 advertised

generate_sign_in_sheet — Generate sign-in sheet
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a sign in sheet template, a visitor log template, a contact or email sign-up sheet, or a weekly sign-in and out timesheet to print for a meeting, event, class, open house or front desk. Returns a print-ready PDF where the rows fill each page to the bottom margin and the column headings repeat on each page, plus a CSV template. Custom columns, title, date, organization, row count, Letter/A4/Legal, landscape, striping. Does not collect sign-ins online, track hours or calculate pay. For volunteer or potluck sign-ups use generate_sign_up_sheet; for class rosters with dates use generate_attendance_sheet.

generate_sign_in_sheet input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "date": {
      "type": [
        "string",
        "null"
      ],
      "description": "Date printed in the header, in any common form, e.g. \"2026-11-14\", \"Nov 14 2026\" or \"11/14/2026\" (read as US month/day). Leave out to print a blank Date line."
    },
    "days": {
      "type": [
        "string",
        "null"
      ],
      "description": "Timesheet only: which days, e.g. \"Mon-Fri\" (default), \"Mon, Wed, Fri\" or \"every day\"."
    },
    "rows": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Number of writing rows, e.g. 25 or \"40 rows\". Leave out to fill one page exactly. More rows than fit continue on more pages, each page full; \"20 per page\" sets rows per page."
    },
    "pages": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Number of identical blank pages when no list is given, 1 to 50, e.g. 3. Default 1."
    },
    "title": {
      "type": [
        "string",
        "null"
      ],
      "description": "Heading printed at the top, e.g. \"Board Meeting Sign-In\" or \"Fall Open House\". Default depends on the sheet type."
    },
    "columns": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Column headings to use instead of the defaults, as a list or comma separated text, e.g. [\"Name\", \"Email\", \"Phone\", \"Signature\"]. Any names work; widths follow the content (Email wide, Time In narrow, a \"?\" column is a tick box)."
    },
    "teacher": {
      "type": [
        "string",
        "null"
      ],
      "description": "Host or supervisor name printed in the header, e.g. \"Dana Ruiz\"."
    },
    "location": {
      "type": [
        "string",
        "null"
      ],
      "description": "Location printed in the header, e.g. \"Room 204\" or \"Community Hall\". Leave out for a blank line."
    },
    "numbered": {
      "type": [
        "boolean",
        "string",
        "null"
      ],
      "description": "Print a # column with row numbers, e.g. true. Default true for sign-in, contact and attendance sheets."
    },
    "org_name": {
      "type": [
        "string",
        "null"
      ],
      "description": "Organization, school or business name printed above the title, e.g. \"Maple Street PTA\"."
    },
    "striping": {
      "type": [
        "boolean",
        "string",
        "null"
      ],
      "description": "Light gray shading on alternate rows (or alternate groups), e.g. false for plain rows. Default true."
    },
    "subtitle": {
      "type": [
        "string",
        "null"
      ],
      "description": "Optional second line under the title, e.g. \"Quarterly review, 6 pm\"."
    },
    "page_size": {
      "type": [
        "string",
        "null"
      ],
      "description": "Paper size: \"Letter\" (default, 8.5x11), \"A4\" or \"Legal\". \"A4 landscape\" also sets the orientation."
    },
    "sheet_type": {
      "type": [
        "string",
        "null"
      ],
      "description": "Which sheet, e.g. \"sign-in\" (meeting, event, class or open house; default), \"visitor log\" (date, visitor name, company, host, time in, time out, badge #, signature), \"contact\" (name, email, phone, company, OK to email) or \"timesheet\" (weekly sign-in and out by day)."
    },
    "week_start": {
      "type": [
        "string",
        "null"
      ],
      "description": "Timesheet only: first day of the week, e.g. \"2026-11-02\". Rows are grouped by day with dates."
    },
    "orientation": {
      "type": [
        "string",
        "null"
      ],
      "description": "\"portrait\" or \"landscape\", e.g. \"landscape\". Default portrait (visitor logs and attendance sheets: landscape). Switches to landscape by itself when the columns do not fit."
    },
    "instructions": {
      "type": [
        "string",
        "null"
      ],
      "description": "One line of instructions under the header, e.g. \"Please print clearly\". Each type has a default; \"none\" removes it."
    },
    "extra_columns": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Columns to add to the defaults, e.g. \"Dietary needs\" or [\"T-shirt size\", \"Initials\"]."
    },
    "spots_per_day": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Timesheet only: name rows under each day, e.g. 6. Default fills the page."
    }
  }
}
generate_sign_in_sheet output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "sheet_type",
    "label",
    "title",
    "page_size",
    "orientation",
    "pages",
    "rows_per_page",
    "total_rows",
    "prefilled_rows",
    "blank_rows",
    "row_height_in",
    "columns",
    "date_columns",
    "groups",
    "names_count",
    "print_check",
    "assumed",
    "notes",
    "downloads",
    "links_expire_minutes"
  ],
  "properties": {
    "label": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "pages": {
      "type": "number"
    },
    "title": {
      "type": "string"
    },
    "groups": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "label",
          "spots"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "spots": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "assumed": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "columns": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "width_in"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "width_in": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "pdf",
        "csv"
      ],
      "properties": {
        "csv": {
          "type": "string"
        },
        "pdf": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "page_size": {
      "type": "string"
    },
    "blank_rows": {
      "type": "number"
    },
    "sheet_type": {
      "type": "string"
    },
    "total_rows": {
      "type": "number"
    },
    "names_count": {
      "type": "number"
    },
    "orientation": {
      "type": "string"
    },
    "print_check": {
      "type": "string"
    },
    "date_columns": {
      "type": "number"
    },
    "row_height_in": {
      "type": "number"
    },
    "rows_per_page": {
      "type": "number"
    },
    "prefilled_rows": {
      "type": "number"
    },
    "links_expire_minutes": {
      "type": [
        "number",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
generate_sign_in_sheet annotations
{
  "title": "Generate sign-in sheet",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_sign_up_sheet — Generate sign-up sheet
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a sign up sheet template to print, either a volunteer sign up sheet with time slots and a number of spots per slot, or a potluck sign up sheet with items (main dish, salad, dessert) and spots per item. Slots can be listed or built from a start time, end time and slot length. Returns a print-ready PDF with rows filling the page and a CSV template. Does not run an online sign-up, send reminders or check who signed up.

generate_sign_up_sheet input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "date": {
      "type": [
        "string",
        "null"
      ],
      "description": "Date printed in the header, in any common form, e.g. \"2026-11-14\", \"Nov 14 2026\" or \"11/14/2026\" (read as US month/day). Leave out to print a blank Date line."
    },
    "rows": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Number of writing rows, e.g. 25 or \"40 rows\". Leave out to fill one page exactly. More rows than fit continue on more pages, each page full; \"20 per page\" sets rows per page."
    },
    "items": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Potluck or supply items, e.g. \"Main dish x3, Salad x2, Dessert x2, Drinks, Plates and cups\". \"x3\", \"(3)\" or \": 3\" after an item sets how many people can sign up for it."
    },
    "pages": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Number of identical blank pages when no list is given, 1 to 50, e.g. 3. Default 1."
    },
    "title": {
      "type": [
        "string",
        "null"
      ],
      "description": "Heading printed at the top, e.g. \"Board Meeting Sign-In\" or \"Fall Open House\". Default depends on the sheet type."
    },
    "columns": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Column headings to use instead of the defaults, as a list or comma separated text, e.g. [\"Name\", \"Email\", \"Phone\", \"Signature\"]. Any names work; widths follow the content (Email wide, Time In narrow, a \"?\" column is a tick box)."
    },
    "teacher": {
      "type": [
        "string",
        "null"
      ],
      "description": "Coordinator or host name printed in the header, e.g. \"Sam Lee\"."
    },
    "end_time": {
      "type": [
        "string",
        "null"
      ],
      "description": "Volunteer: last slot end, e.g. \"5pm\" or \"17:00\"."
    },
    "location": {
      "type": [
        "string",
        "null"
      ],
      "description": "Location printed in the header, e.g. \"Room 204\" or \"Community Hall\". Leave out for a blank line."
    },
    "numbered": {
      "type": [
        "boolean",
        "string",
        "null"
      ],
      "description": "Print a # column with row numbers, e.g. true. Default true for sign-in, contact and attendance sheets."
    },
    "org_name": {
      "type": [
        "string",
        "null"
      ],
      "description": "Organization, school or business name printed above the title, e.g. \"Maple Street PTA\"."
    },
    "striping": {
      "type": [
        "boolean",
        "string",
        "null"
      ],
      "description": "Light gray shading on alternate rows (or alternate groups), e.g. false for plain rows. Default true."
    },
    "subtitle": {
      "type": [
        "string",
        "null"
      ],
      "description": "Optional second line under the title, e.g. \"Quarterly review, 6 pm\"."
    },
    "page_size": {
      "type": [
        "string",
        "null"
      ],
      "description": "Paper size: \"Letter\" (default, 8.5x11), \"A4\" or \"Legal\". \"A4 landscape\" also sets the orientation."
    },
    "sheet_type": {
      "type": [
        "string",
        "null"
      ],
      "description": "\"volunteer\" (time slots with spots for names; default) or \"potluck\" (items people bring, with spots per item)."
    },
    "start_time": {
      "type": [
        "string",
        "null"
      ],
      "description": "Volunteer: first slot start, e.g. \"9am\" or \"09:00\"."
    },
    "time_slots": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Volunteer slots, one per item or line, e.g. [\"9:00-11:00\", \"11:00-1:00\", \"1:00-3:00 x4\"]. \"x4\" or \"(4)\" after a slot sets its spots. Or give start_time, end_time and slot_length instead."
    },
    "orientation": {
      "type": [
        "string",
        "null"
      ],
      "description": "\"portrait\" or \"landscape\", e.g. \"landscape\". Default portrait (visitor logs and attendance sheets: landscape). Switches to landscape by itself when the columns do not fit."
    },
    "slot_length": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Volunteer: slot length, e.g. \"2 hours\", \"90 min\" or 120 (minutes). Default 1 hour."
    },
    "instructions": {
      "type": [
        "string",
        "null"
      ],
      "description": "One line of instructions under the header, e.g. \"Please print clearly\". Each type has a default; \"none\" removes it."
    },
    "extra_columns": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Columns to add to the defaults, e.g. \"Dietary needs\" or [\"T-shirt size\", \"Initials\"]."
    },
    "spots_per_slot": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Name spots under each slot or item that has no number of its own, e.g. 3 or \"3 volunteers\". Default fills the page."
    }
  }
}
generate_sign_up_sheet output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "sheet_type",
    "label",
    "title",
    "page_size",
    "orientation",
    "pages",
    "rows_per_page",
    "total_rows",
    "prefilled_rows",
    "blank_rows",
    "row_height_in",
    "columns",
    "date_columns",
    "groups",
    "names_count",
    "print_check",
    "assumed",
    "notes",
    "downloads",
    "links_expire_minutes"
  ],
  "properties": {
    "label": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "pages": {
      "type": "number"
    },
    "title": {
      "type": "string"
    },
    "groups": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "label",
          "spots"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "spots": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "assumed": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "columns": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "width_in"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "width_in": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "pdf",
        "csv"
      ],
      "properties": {
        "csv": {
          "type": "string"
        },
        "pdf": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "page_size": {
      "type": "string"
    },
    "blank_rows": {
      "type": "number"
    },
    "sheet_type": {
      "type": "string"
    },
    "total_rows": {
      "type": "number"
    },
    "names_count": {
      "type": "number"
    },
    "orientation": {
      "type": "string"
    },
    "print_check": {
      "type": "string"
    },
    "date_columns": {
      "type": "number"
    },
    "row_height_in": {
      "type": "number"
    },
    "rows_per_page": {
      "type": "number"
    },
    "prefilled_rows": {
      "type": "number"
    },
    "links_expire_minutes": {
      "type": [
        "number",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
generate_sign_up_sheet annotations
{
  "title": "Generate sign-up sheet",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_attendance_sheet — Generate attendance sheet
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants an attendance sheet or class roster template to print, with student or member names pre-filled from a pasted list, with one column per session date (from a list of dates, a start and end date with meeting days, a number of weeks, or a month) or blank date columns, plus a Total column. Long rosters continue on more pages and too many dates split into column sets, with headings repeated. Returns a PDF and a CSV template. Does not take attendance online, calculate grades or store records.

generate_attendance_sheet input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "date": {
      "type": [
        "string",
        "null"
      ],
      "description": "Date printed in the header, in any common form, e.g. \"2026-11-14\", \"Nov 14 2026\" or \"11/14/2026\" (read as US month/day). Leave out to print a blank Date line."
    },
    "days": {
      "type": [
        "string",
        "null"
      ],
      "description": "Meeting days, e.g. \"Mon, Wed, Fri\", \"MWF\", \"Tuesdays and Thursdays\" or \"weekdays\" (default)."
    },
    "rows": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Number of writing rows, e.g. 25 or \"40 rows\". Leave out to fill one page exactly. More rows than fit continue on more pages, each page full; \"20 per page\" sets rows per page."
    },
    "sort": {
      "type": [
        "string",
        "null"
      ],
      "description": "Sort the names: \"last\" (by last name), \"first\" (alphabetical) or leave out to keep the order given."
    },
    "dates": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Session dates for the column headings, e.g. [\"2026-11-02\", \"2026-11-04\"] or \"Nov 2, Nov 4, Nov 6\". Or use start_date with end_date, weeks, sessions or month."
    },
    "month": {
      "type": [
        "string",
        "null"
      ],
      "description": "A whole month of meeting days, e.g. \"November 2026\"."
    },
    "names": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Student or member names, pasted as one name per line, comma separated text or a list, e.g. \"Ava Brown\\nLiam Chen\\nNoah Diaz\" or [\"Ava Brown\", \"Liam Chen\"]. \"Last, First\" names stay whole when one per line. Leave out for blank name rows."
    },
    "pages": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Number of identical blank pages when no list is given, 1 to 50, e.g. 3. Default 1."
    },
    "title": {
      "type": [
        "string",
        "null"
      ],
      "description": "Class or group name printed as the heading, e.g. \"Period 3 Biology\". Default \"Attendance Sheet\"."
    },
    "weeks": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Number of weeks from start_date, e.g. 4."
    },
    "columns": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Column headings to use instead of the defaults, as a list or comma separated text, e.g. [\"Name\", \"Email\", \"Phone\", \"Signature\"]. Any names work; widths follow the content (Email wide, Time In narrow, a \"?\" column is a tick box)."
    },
    "teacher": {
      "type": [
        "string",
        "null"
      ],
      "description": "Teacher or instructor printed in the header, e.g. \"Ms. Patel\"."
    },
    "end_date": {
      "type": [
        "string",
        "null"
      ],
      "description": "Last class date, e.g. \"2026-12-18\"."
    },
    "location": {
      "type": [
        "string",
        "null"
      ],
      "description": "Location printed in the header, e.g. \"Room 204\" or \"Community Hall\". Leave out for a blank line."
    },
    "numbered": {
      "type": [
        "boolean",
        "string",
        "null"
      ],
      "description": "Print a # column with row numbers, e.g. true. Default true for sign-in, contact and attendance sheets."
    },
    "org_name": {
      "type": [
        "string",
        "null"
      ],
      "description": "Organization, school or business name printed above the title, e.g. \"Maple Street PTA\"."
    },
    "sessions": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Number of sessions (date columns), e.g. 10. Without dates the columns are left blank to write dates in."
    },
    "striping": {
      "type": [
        "boolean",
        "string",
        "null"
      ],
      "description": "Light gray shading on alternate rows (or alternate groups), e.g. false for plain rows. Default true."
    },
    "subtitle": {
      "type": [
        "string",
        "null"
      ],
      "description": "Optional second line under the title, e.g. \"Quarterly review, 6 pm\"."
    },
    "page_size": {
      "type": [
        "string",
        "null"
      ],
      "description": "Paper size: \"Letter\" (default, 8.5x11), \"A4\" or \"Legal\". \"A4 landscape\" also sets the orientation."
    },
    "start_date": {
      "type": [
        "string",
        "null"
      ],
      "description": "First class date, e.g. \"2026-11-02\". With end_date, weeks or sessions, dates are listed on the meeting days."
    },
    "orientation": {
      "type": [
        "string",
        "null"
      ],
      "description": "\"portrait\" or \"landscape\", e.g. \"landscape\". Default portrait (visitor logs and attendance sheets: landscape). Switches to landscape by itself when the columns do not fit."
    },
    "instructions": {
      "type": [
        "string",
        "null"
      ],
      "description": "One line of instructions under the header, e.g. \"Please print clearly\". Each type has a default; \"none\" removes it."
    },
    "total_column": {
      "type": [
        "boolean",
        "string",
        "null"
      ],
      "description": "Add a Total column at the end, e.g. false. Default true."
    },
    "extra_columns": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                ]
              }
            },
            {
              "type": "string"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Columns to add to the defaults, e.g. \"Dietary needs\" or [\"T-shirt size\", \"Initials\"]."
    }
  }
}
generate_attendance_sheet output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "sheet_type",
    "label",
    "title",
    "page_size",
    "orientation",
    "pages",
    "rows_per_page",
    "total_rows",
    "prefilled_rows",
    "blank_rows",
    "row_height_in",
    "columns",
    "date_columns",
    "groups",
    "names_count",
    "print_check",
    "assumed",
    "notes",
    "downloads",
    "links_expire_minutes"
  ],
  "properties": {
    "label": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "pages": {
      "type": "number"
    },
    "title": {
      "type": "string"
    },
    "groups": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "label",
          "spots"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "spots": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "assumed": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "columns": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "width_in"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "width_in": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "pdf",
        "csv"
      ],
      "properties": {
        "csv": {
          "type": "string"
        },
        "pdf": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "page_size": {
      "type": "string"
    },
    "blank_rows": {
      "type": "number"
    },
    "sheet_type": {
      "type": "string"
    },
    "total_rows": {
      "type": "number"
    },
    "names_count": {
      "type": "number"
    },
    "orientation": {
      "type": "string"
    },
    "print_check": {
      "type": "string"
    },
    "date_columns": {
      "type": "number"
    },
    "row_height_in": {
      "type": "number"
    },
    "rows_per_page": {
      "type": "number"
    },
    "prefilled_rows": {
      "type": "number"
    },
    "links_expire_minutes": {
      "type": [
        "number",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
generate_attendance_sheet annotations
{
  "title": "Generate attendance sheet",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

sign-in-sheet-widget — Zovo Sign-In Sheets view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Sign-In Sheets.

sign-in-sheet-widget URI
ui://widget/sign-in-sheet-v1-1.0.0-7649a4a6455f7041c8bc2f0bc56ddcbfdfce33ef9f2b4230f5213724aca84951.html

MIME type: text/html;profile=mcp-app

sign-in-sheet-widget-legacy — Zovo Sign-In Sheets view (previous versions)

Advertised by the server during the last successful anonymous check.

sign-in-sheet-widget-legacy URI template
ui://widget/sign-in-sheet-{version}.html

MIME type: text/html;profile=mcp-app

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
1112 ms
95th percentile latency
1112 ms

Maintenance history

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

  • · probe · passed · 1112 ms · metadata changed · 3 tool(s), 1 resource(s), 1 resource template(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 zovo-sign-in-sheets-mcp https://sign-in-sheet.zovo.one/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 zovo-sign-in-sheets-mcp --url https://sign-in-sheet.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zovo-sign-in-sheets-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zovo-sign-in-sheets-mcp": {
      "url": "https://sign-in-sheet.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zovo-sign-in-sheets-mcp": {
      "type": "streamableHttp",
      "url": "https://sign-in-sheet.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-sign-in-sheets-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-sign-in-sheets-mcp": {
      "type": "http",
      "url": "https://sign-in-sheet.zovo.one/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 zovo-sign-in-sheets-mcp https://sign-in-sheet.zovo.one/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://sign-in-sheet.zovo.one/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": {
    "zovo-sign-in-sheets-mcp": {
      "serverUrl": "https://sign-in-sheet.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

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