Skip to content

Papierkram MCP by usefulapi

io.usefulapi/papierkramusefulapi.iostreamable-httpv1.0.0Scanned

Read Papierkram invoices, vouchers, contacts, projects, time; create contacts, time, draft invoices.

33 tools: 1 can delete or cancel things, 7 change things and 25 only read.

Tools: 1 delete, 0 irreversible, 7 write, 25 read.
  • Reads private data · 4
  • Reads text others write · 8
  • Can send data out · 2
  • No findings

Anlyon alternative

8 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

33 tools

Deletes or cancels 1Claude Code: deny
  • papierkram_update_companyWRITE: change fields of an existing contact (only the fields you pass are changed).Reads text others writeNo findings

    Why it is in this group

    • The name "papierkram_update_company" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: change fields of an existing contact (only the fields you pass are changed). Read it first with papierkram_get_company.

    Annotations the server declares

    • title: Update company
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
Changes things 7Claude Code: ask
  • papierkram_create_companyWRITE: create a contact (company) in Papierkram.Reads text others writeCan send data outNo findings

    Why it is in this group

    • The name "papierkram_create_company" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a destination (input.phone): what the tool writes goes there.
    Description, as the server wrote it
    WRITE: create a contact (company) in Papierkram. Papierkram assigns the customer number. Nothing is sent to the contact. Check papierkram_list_companies first to avoid duplicates. Costs Papierkram API credits (a create 10, an invoice 50; the monthly quota is limited).

    Annotations the server declares

    • title: Create company
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • papierkram_create_invoiceWRITE: create a DRAFT outgoing invoice (state draft; it is NOT finalized or sent, and gets no invoice number until the user completes it in Papierkram).Reads text others writeNo findings

    Why it is in this group

    • The name "papierkram_create_invoice" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: create a DRAFT outgoing invoice (state draft; it is NOT finalized or sent, and gets no invoice number until the user completes it in Papierkram). Needs a payment term id (papierkram_list_payment_terms) and at least one line item. Use papierkram_list_invoices afterwards to check it. Costs Papierkram API credits (a create 10, an invoice 50; the monthly quota is limited).

    Annotations the server declares

    • title: Create draft invoice
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • papierkram_create_personWRITE: add a contact person to an existing company.Reads text others writeCan send data outNo findings

    Why it is in this group

    • The name "papierkram_create_person" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a destination (input.phone): what the tool writes goes there.
    Description, as the server wrote it
    WRITE: add a contact person to an existing company. Nothing is sent to the person. Costs Papierkram API credits (a create 10, an invoice 50; the monthly quota is limited).

    Annotations the server declares

    • title: Create person
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • papierkram_create_projectWRITE: create a project for a customer.Reads text others writeNo findings

    Why it is in this group

    • The name "papierkram_create_project" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: create a project for a customer. Costs Papierkram API credits (a create 10, an invoice 50; the monthly quota is limited).

    Annotations the server declares

    • title: Create project
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • papierkram_create_propositionWRITE: create a stored product or service (Leistung/Artikel) with a price.Reads text others writeNo findings

    Why it is in this group

    • The name "papierkram_create_proposition" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: create a stored product or service (Leistung/Artikel) with a price. Costs Papierkram API credits (a create 10, an invoice 50; the monthly quota is limited).

    Annotations the server declares

    • title: Create product or service
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • papierkram_create_taskWRITE: create a time-tracking task in a project.Reads text others writeNo findings

    Why it is in this group

    • The name "papierkram_create_task" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: create a time-tracking task in a project. Costs Papierkram API credits (a create 10, an invoice 50; the monthly quota is limited).

    Annotations the server declares

    • title: Create task
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • papierkram_create_time_entryWRITE: record a time entry (worked time) on a task.Reads text others writeNo findings

    Why it is in this group

    • The name "papierkram_create_time_entry" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: record a time entry (worked time) on a task. Not billed until an invoice is made. Costs Papierkram API credits (a create 10, an invoice 50; the monthly quota is limited).

    Annotations the server declares

    • title: Create time entry
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Only reads 25Show 25 read-only tools
  • papierkram_get_bank_transactionGet one bank transaction by id.No findings

    Why it is in this group

    • The name "papierkram_get_bank_transaction" says "get": a word for reading.
    Description, as the server wrote it
    Get one bank transaction by id.

    Annotations the server declares

    • title: Get bank transaction
    • readOnlyHint: true
  • papierkram_get_companyGet one contact (company) by id, with its people.Reads private dataNo findings

    Why it is in this group

    • The name "papierkram_get_company" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "get" and "contact": it reads contacts.
    Description, as the server wrote it
    Get one contact (company) by id, with its people.

    Annotations the server declares

    • title: Get company
    • readOnlyHint: true
  • papierkram_get_estimateGet one estimate with its line items.No findings

    Why it is in this group

    • The name "papierkram_get_estimate" says "get": a word for reading.
    Description, as the server wrote it
    Get one estimate with its line items.

    Annotations the server declares

    • title: Get estimate
    • readOnlyHint: true
  • papierkram_get_infoRead the API version and the account's custom invoice templates (ids usable as custom_template_id when creating an invoice).No findings

    Why it is in this group

    • The name "papierkram_get_info" says "get": a word for reading.
    Description, as the server wrote it
    Read the API version and the account's custom invoice templates (ids usable as custom_template_id when creating an invoice).

    Annotations the server declares

    • title: Get account info
    • readOnlyHint: true
  • papierkram_get_invoiceGet one outgoing invoice with its line items, billing address and payment term.No findings

    Why it is in this group

    • The name "papierkram_get_invoice" says "get": a word for reading.
    Description, as the server wrote it
    Get one outgoing invoice with its line items, billing address and payment term.

    Annotations the server declares

    • title: Get invoice
    • readOnlyHint: true
  • papierkram_get_personGet one contact person of a company.Reads private dataNo findings

    Why it is in this group

    • The name "papierkram_get_person" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "get" and "contact": it reads contacts.
    Description, as the server wrote it
    Get one contact person of a company.

    Annotations the server declares

    • title: Get person
    • readOnlyHint: true
  • papierkram_get_projectGet one project by id.No findings

    Why it is in this group

    • The name "papierkram_get_project" says "get": a word for reading.
    Description, as the server wrote it
    Get one project by id.

    Annotations the server declares

    • title: Get project
    • readOnlyHint: true
  • papierkram_get_propositionGet one stored product or service, including its vat_rate (name such as 19% and rate such as 0.19).No findings

    Why it is in this group

    • The name "papierkram_get_proposition" says "get": a word for reading.
    Description, as the server wrote it
    Get one stored product or service, including its vat_rate (name such as 19% and rate such as 0.19).

    Annotations the server declares

    • title: Get product or service
    • readOnlyHint: true
  • papierkram_get_taskGet one task by id.No findings

    Why it is in this group

    • The name "papierkram_get_task" says "get": a word for reading.
    Description, as the server wrote it
    Get one task by id.

    Annotations the server declares

    • title: Get task
    • readOnlyHint: true
  • papierkram_get_time_entryGet one time entry by id.No findings

    Why it is in this group

    • The name "papierkram_get_time_entry" says "get": a word for reading.
    Description, as the server wrote it
    Get one time entry by id.

    Annotations the server declares

    • title: Get time entry
    • readOnlyHint: true
  • papierkram_get_userGet one user by id.No findings

    Why it is in this group

    • The name "papierkram_get_user" says "get": a word for reading.
    Description, as the server wrote it
    Get one user by id.

    Annotations the server declares

    • title: Get user
    • readOnlyHint: true
  • papierkram_get_voucherGet one expense voucher with its line items.No findings

    Why it is in this group

    • The name "papierkram_get_voucher" says "get": a word for reading.
    Description, as the server wrote it
    Get one expense voucher with its line items.

    Annotations the server declares

    • title: Get expense voucher
    • readOnlyHint: true
  • papierkram_list_bank_connectionsList the bank accounts connected to Papierkram (name, IBAN, balance data as Papierkram reports it).No findings

    Why it is in this group

    • The name "papierkram_list_bank_connections" says "list": a word for reading.
    Description, as the server wrote it
    List the bank accounts connected to Papierkram (name, IBAN, balance data as Papierkram reports it). Paged.

    Annotations the server declares

    • title: List bank connections
    • readOnlyHint: true
  • papierkram_list_bank_transactionsList bank transactions (value, currency, usage text, booking date, counterparty).No findings

    Why it is in this group

    • The name "papierkram_list_bank_transactions" says "list": a word for reading.
    Description, as the server wrote it
    List bank transactions (value, currency, usage text, booking date, counterparty). Filter by bank connection. Paged.

    Annotations the server declares

    • title: List bank transactions
    • readOnlyHint: true
  • papierkram_list_companiesList contacts (companies: customers and suppliers) with address, VAT id and contact data.Reads private dataNo findings

    Why it is in this group

    • The name "papierkram_list_companies" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "list" and "contact": it reads contacts.
    Description, as the server wrote it
    List contacts (companies: customers and suppliers) with address, VAT id and contact data. Paged.

    Annotations the server declares

    • title: List companies
    • readOnlyHint: true
  • papierkram_list_estimatesList estimates (Angebote) with state, dates and totals.No findings

    Why it is in this group

    • The name "papierkram_list_estimates" says "list": a word for reading.
    Description, as the server wrote it
    List estimates (Angebote) with state, dates and totals. Filter by company, project or document date range. Paged.

    Annotations the server declares

    • title: List estimates
    • readOnlyHint: true
  • papierkram_list_invoicesList outgoing invoices (Ausgangsrechnungen) with state (draft, ...), dates, totals and outstanding_amount.No findings

    Why it is in this group

    • The name "papierkram_list_invoices" says "list": a word for reading.
    Description, as the server wrote it
    List outgoing invoices (Ausgangsrechnungen) with state (draft, ...), dates, totals and outstanding_amount. Filter by company, project or document date range. Paged.

    Annotations the server declares

    • title: List invoices
    • readOnlyHint: true
  • papierkram_list_payment_termsList the payment term templates (ids needed as payment_term_id when creating an invoice).No findings

    Why it is in this group

    • The name "papierkram_list_payment_terms" says "list": a word for reading.
    Description, as the server wrote it
    List the payment term templates (ids needed as payment_term_id when creating an invoice).

    Annotations the server declares

    • title: List payment terms
    • readOnlyHint: true
  • papierkram_list_personsList the contact persons of one company.Reads private dataNo findings

    Why it is in this group

    • The name "papierkram_list_persons" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "list" and "contact": it reads contacts.
    Description, as the server wrote it
    List the contact persons of one company. Paged.

    Annotations the server declares

    • title: List persons of a company
    • readOnlyHint: true
  • papierkram_list_projectsList projects with dates, budget and state.No findings

    Why it is in this group

    • The name "papierkram_list_projects" says "list": a word for reading.
    Description, as the server wrote it
    List projects with dates, budget and state. Filter by company. Paged.

    Annotations the server declares

    • title: List projects
    • readOnlyHint: true
  • papierkram_list_propositionsList the stored products and services (Leistungen/Artikel) with article number, price and unit (the VAT rate is only in papierkram_get_proposition).No findings

    Why it is in this group

    • The name "papierkram_list_propositions" says "list": a word for reading.
    Description, as the server wrote it
    List the stored products and services (Leistungen/Artikel) with article number, price and unit (the VAT rate is only in papierkram_get_proposition). Paged.

    Annotations the server declares

    • title: List products and services
    • readOnlyHint: true
  • papierkram_list_tasksList time-tracking tasks.No findings

    Why it is in this group

    • The name "papierkram_list_tasks" says "list": a word for reading.
    Description, as the server wrote it
    List time-tracking tasks. Filter by project or product/service. Paged.

    Annotations the server declares

    • title: List tasks
    • readOnlyHint: true
  • papierkram_list_time_entriesList tracked time entries.No findings

    Why it is in this group

    • The name "papierkram_list_time_entries" says "list": a word for reading.
    Description, as the server wrote it
    List tracked time entries. Filter by project, task, invoice, user, billing state or start time range (RFC 3339 date-time). Paged.

    Annotations the server declares

    • title: List time entries
    • readOnlyHint: true
  • papierkram_list_usersList the users of the account (ids needed as user_id for time entries and tasks).No findings

    Why it is in this group

    • The name "papierkram_list_users" says "list": a word for reading.
    Description, as the server wrote it
    List the users of the account (ids needed as user_id for time entries and tasks).

    Annotations the server declares

    • title: List users
    • readOnlyHint: true
  • papierkram_list_vouchersList expense vouchers (Belege / incoming invoices and receipts) with creditor, state, dates and amounts.No findings

    Why it is in this group

    • The name "papierkram_list_vouchers" says "list": a word for reading.
    Description, as the server wrote it
    List expense vouchers (Belege / incoming invoices and receipts) with creditor, state, dates and amounts. Filter by creditor (supplier company), project or document date range. Paged.

    Annotations the server declares

    • title: List expense vouchers
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

64 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 2 outbound tools breaks every one.

Reads private data4
Reads files, mail, messages, databases, secrets, calendars or repositories.
Can send data out2
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
deny to break every path
{
  "permissions": {
    "deny": [
      "mcp__papierkram__papierkram_create_company",
      "mcp__papierkram__papierkram_create_person"
    ]
  }
}

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

No check matched anything in these tool definitions. That is not a safety guarantee.

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http papierkram https://papierkram.usefulapi.io/mcp
claude mcp add --transport http papierkram https://papierkram.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__papierkram__papierkram_get_info",
      "mcp__papierkram__papierkram_list_companies",
      "mcp__papierkram__papierkram_get_company",
      "mcp__papierkram__papierkram_list_persons",
      "mcp__papierkram__papierkram_get_person",
      "mcp__papierkram__papierkram_list_invoices",
      "mcp__papierkram__papierkram_get_invoice",
      "mcp__papierkram__papierkram_list_estimates",
      "mcp__papierkram__papierkram_get_estimate",
      "mcp__papierkram__papierkram_list_vouchers",
      "mcp__papierkram__papierkram_get_voucher",
      "mcp__papierkram__papierkram_list_payment_terms",
      "mcp__papierkram__papierkram_list_propositions",
      "mcp__papierkram__papierkram_get_proposition",
      "mcp__papierkram__papierkram_list_projects",
      "mcp__papierkram__papierkram_get_project",
      "mcp__papierkram__papierkram_list_tasks",
      "mcp__papierkram__papierkram_get_task",
      "mcp__papierkram__papierkram_list_time_entries",
      "mcp__papierkram__papierkram_get_time_entry",
      "mcp__papierkram__papierkram_list_bank_connections",
      "mcp__papierkram__papierkram_list_bank_transactions",
      "mcp__papierkram__papierkram_get_bank_transaction",
      "mcp__papierkram__papierkram_list_users",
      "mcp__papierkram__papierkram_get_user"
    ],
    "ask": [
      "mcp__papierkram__papierkram_create_company",
      "mcp__papierkram__papierkram_create_person",
      "mcp__papierkram__papierkram_create_project",
      "mcp__papierkram__papierkram_create_task",
      "mcp__papierkram__papierkram_create_time_entry",
      "mcp__papierkram__papierkram_create_proposition",
      "mcp__papierkram__papierkram_create_invoice"
    ],
    "deny": [
      "mcp__papierkram__papierkram_update_company"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as papierkram. Review it before you use it.

Capability tags behind 12 rules
  • mcp__papierkram__papierkram_list_companies private-data
  • mcp__papierkram__papierkram_get_company private-data
  • mcp__papierkram__papierkram_list_persons private-data
  • mcp__papierkram__papierkram_get_person private-data
  • mcp__papierkram__papierkram_create_company untrusted-input, outbound
  • mcp__papierkram__papierkram_update_company untrusted-input
  • mcp__papierkram__papierkram_create_person untrusted-input, outbound
  • mcp__papierkram__papierkram_create_project untrusted-input
  • mcp__papierkram__papierkram_create_task untrusted-input
  • mcp__papierkram__papierkram_create_time_entry untrusted-input
  • mcp__papierkram__papierkram_create_proposition untrusted-input
  • mcp__papierkram__papierkram_create_invoice untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.usefulapi/papierkram/verify?hash=398938dfcab69782ed25328f27fff9842de45d349d3bbe8fc373160c157fd101" | jq -e '.changed == false'

Pinned hash 398938dfcab6, from Oct 25, 2026, 19:19 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.usefulapi/papierkram/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.usefulapi/papierkram
[![anlyon.dev](https://anlyon.dev/badge/io.usefulapi/papierkram.svg)](https://anlyon.dev/servers/io.usefulapi/papierkram)

Source: MCP Registry · repository. Synced Oct 25, 2026, 19:18 UTC.