mcpField
P
Proof of Type Input

Proof of Type Input

远程服务
proofoftype.com安全02 周前更新

关于 Proof of Type Input

Proof of Type Input 为网站提供可验证的人类输入框,适合需要确认评论、文章等文本由真人输入的网站开发者。它通过逐字输入和手机确认生成签名证明,而非根据文本内容猜测。

主要功能

  1. 01嵌入可验证的人类输入框
  2. 02生成签名证明令牌
  3. 03验证文本、站点来源和令牌
  4. 04支持 JavaScript 与 React
  5. 05支持在线及离线令牌验证

适用场景

  1. 01为评论表单验证真人输入
  2. 02审核用户提交的文章或评价
  3. 03在服务器保存前核验文本证明

MCP 相关

其 MCP 服务提供框架快速入门、证明令牌验证和主题说明工具,可供编码 Agent 接入并实现该输入框。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://www.proofoftype.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

3
参数类型必填说明
frameworkenum否默认值:htmlhtml | javascript | react | nextjs | express | python | wordpress | curl | offline

详细介绍

Proof of Type

一个能证明是人类亲手输入、而非 AI 生成的文本框。

只需添加一个 script 标签,您网站上的评论、帖子、评价或文章就能附带证明,表明内容由真人亲手输入:登录 Proof of Type,逐字输入(不粘贴、无 AI 生成文本),并在手机上通过 Face ID 或指纹确认。您的服务器会收到文本和签名证明令牌,您或任何人都可以验证该令牌。

<script src="https://www.proofoftype.com/sdk/v1.js" async></script>

<form method="post" action="/comments">
  <div data-proofoftype data-name="comment" data-placeholder="Write a comment"></div>
  <button>Post</button>
</form>

提交表单时,用户会在手机上确认,随后您的服务器会收到:

字段内容
comment按原样输入的文本
comment_proof证明令牌(EdDSA 签名的 JWT)

使用您的 AI 编码 Agent 构建(MCP)

正在用 Vibe Coding 构建网站?连接 Proof of Type MCP 服务,并向您的 Agent 提出「创建一个能证明是人类输入的评论框」。

claude mcp add --transport http proofoftype https://www.proofoftype.com/mcp

其他客户端(Cursor、VS Code、……):

{ "mcpServers": { "proofoftype": { "url": "https://www.proofoftype.com/mcp" } } }

工具:get_quickstart(framework)、verify_proof(token, text, origin)、explain(topic)。

原理

AI 生成文本如今既免费又无穷无尽,而 AI 检测器只能根据最终文字猜测,因此两种判断都有可能出错。Proof of Type 不靠猜测,而是证明文本的生成方式:

  1. 用户在我们的输入框中逐字输入。输入框运行在来自 proofoftype.com 的安全框架中,因此宿主页面、扩展程序或脚本都无法伪造击键。
  2. 我们的服务器会为输入过程计时(不能瞬间完成,也不能重放),并根据人类的输入节奏进行评分。
  3. 用户在手机上的 Proof of Type 应用中通过 Face ID 或指纹确认确切文本。手机硬件会为该应用提供可信证明(Apple App Attest、Android 密钥证明)。脚本无法完成这一步。

粘贴或生成的文本永远无法获得证明。

在您的服务器上验证

保存文本前,务必先检查证明。只有在证明有效、与文本匹配且由您的网站生成时才接受。

const r = await fetch('https://www.proofoftype.com/api/v1/verify', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    token: req.body.comment_proof,
    text: req.body.comment,              // the exact text
    origin: 'https://your-site.com',     // your site
    max_age_seconds: 600,                // made in the last 10 minutes
  }),
}).then((res) => res.json());

if (!r.valid || !r.text_matches || !r.origin_matches || !r.fresh) {
  return res.status(400).send('Please type your comment in the box.');
}
// Use each proof once: store r.proof.id with the comment, refuse repeats
// (proof tokens are public — they're in proof links).
// r.proof.author: the Proof of Type username who typed it
// r.proof.link: a link pasted with the text, if any

想用辅助函数?将 server.mjs 复制到您的项目中(verifyProof({ token, text, origin }))。

或者直接调用 API(无需密钥):

curl -s https://www.proofoftype.com/api/v1/verify \
  -H 'Content-Type: application/json' \
  -d '{"token":"<comment_proof>","text":"<comment>","origin":"https://your-site.com"}'
{ "valid": true, "text_matches": true, "origin_matches": true,
  "proof": { "id": "pot_…", "author": "yogev", "origin": "https://your-site.com",
             "typed_at": "2026-10-11T18:20:31.000Z", "score": 87, "words": 6, "text_sha256": "…" } }
离线验证

证明令牌是使用 EdDSA(Ed25519)签名的 JWT。公钥:https://www.proofoftype.com/.well-known/jwks.json。

import { createRemoteJWKSet, jwtVerify } from 'jose';
import { createHash } from 'node:crypto';

const JWKS = createRemoteJWKSet(new URL('https://www.proofoftype.com/.well-known/jwks.json'));
const { payload } = await jwtVerify(token, JWKS, {
  issuer: 'https://www.proofoftype.com',
  audience: 'https://your-site.com',
});
if (payload.text_sha256 !== createHash('sha256').update(text, 'utf8').digest('hex')) throw new Error('Not the signed text');
声明内容
isshttps://www.proofoftype.com
sub证明 ID(pot_…)
aud输入文本的网站
iat验证时间
typed_by"human"
authorProof of Type 用户名
signed_on"ios" 或 "android"
text_sha256确切 UTF-8 文本的 SHA-256(十六进制)
score, wpm, words, chars人类评分(0–100)、输入速度、长度

JavaScript API

const input = ProofOfType.mount('#editor', {
  placeholder: 'Write your article…',
  maxWords: 2000,
  button: false,            // verify from your own button
});
input.on('change', ({ words }) => {});
const proof = await input.verify();   // { text, html, token, author, score, url, … }

选项:name、placeholder、maxWords(10–3000)、theme(auto | light | dark)、button、buttonLabel、form、typewriter(是否显示打字机动画,默认为 true)、typewriterColor(例如 '#e11d48')、sound(默认为 true)、allowLinks(默认为 true:证明中会签署一个粘贴的链接,可从验证响应中的 proof.link 读取;false 则会阻止所有粘贴)。result.html 仅用于显示格式,不包含在证明中:请对其进行清理,或使用 result.text。相同选项也可用作 data- 属性(data-max-words、data-button-label、……)。

事件:ready、signin、change、verified、error、resize,也会作为 DOM 事件在元素上触发(proofoftype:verified)。

React

将 react.jsx 复制到您的项目中。它会为您加载 SDK:

import { HumanInput } from './react.jsx';

<HumanInput placeholder="Write a comment" onVerified={(r) => save(r.text, r.token)} />

TypeScript 类型:index.d.ts。

隐私

  • Proof of Type 从不存储用户在你的网站上输入的文本。只有文本的 SHA-256 哈希会被签入证明。
  • 按键会经过检查,然后立即丢弃。只有验证通过后,文本才会到达你的页面,而且只会到达你页面的真实来源。
  • 你的网站会获取用户的 Proof of Type 用户名,不会获取他们的电子邮件或账户。
  • 每份证明只能使用一次:一次输入会话、一次手机签名、一份证明。

开源内容

本仓库包含浏览器 SDK、React 组件、服务端辅助工具、类型定义和示例(MIT)。检查本身(按键捕获、输入时间线、手机签名)由 Proof of Type 执行,托管页面无法更改这些内容。这正是证明有价值的原因。

常见问题

我怎么知道网站上的评论是人写的,而不是 AI 写的? 将此输入框用作文本框,并在你的服务器上验证证明。只有当已登录用户在输入框中输入文本并在手机上批准后,才会生成证明。

这是 AI 检测器吗? 不是。它证明的是输入过程(由人输入、计时并签名),而不是根据文本进行猜测。

我的用户需要账户吗? 需要:一个免费的 Proof of Type 账户和 Proof of Type 应用(iPhone 或 Android)。登录只需一个弹窗;每份证明只需进行一次 Face ID 或指纹验证。

用户可以粘贴内容吗? 只能粘贴链接。允许对输入的文字进行自动更正;不允许使用预测文本、滑行输入和语音听写。

费用是多少? 对人类用户免费。

链接

MIT © Proof of Type

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。