FormPilot

FormPilot

Enables secure web form inspection and autofill using Excel data, Knowledge Packs, and AI, with sensitive field protection and explicit submit confirmation.

Category
访问服务器

README

FormPilot

FormPilot adalah aplikasi Cloudflare Worker untuk mempelajari form melalui MCP, memetakan data dengan Knowledge Packs dan model OpenAI-compatible, lalu mengisi atau mengirim form sesuai kebijakan pengguna.

Produk oleh Aksara Bayu Teknologi. Domain produksi yang disiapkan: https://form-pilot.aksarateknologi.com/.

Desain keamanan

  • File .xlsx dibaca langsung di browser pengguna. File tidak diunggah atau disimpan oleh Worker; hanya baris yang dipilih masuk ke plan sementara.
  • Google SSO memakai OAuth 2.0/OIDC langsung dengan state, nonce, dan PKCE. Worker memvalidasi ID token Google lalu membuat cookie sesi HttpOnly; token Google tidak disimpan.
  • API key model, token MCP, dan signing secret hanya berada pada Worker secrets. UI hanya melihat status siap/tidak siap.
  • Target URL wajib HTTPS. ALLOWED_TARGET_HOSTS bersifat opsional untuk instalasi yang ingin membatasi otomatisasi ke daftar domain tertentu.
  • Password, OTP, CAPTCHA, PIN, token, dan secret tidak dikirim ke AI atau MCP autofill.
  • Plan berlaku 10 menit dan ditandatangani HMAC. Perubahan terhadap plan membuat token persetujuan tidak valid.
  • Isi draft dan submit adalah aksi berbeda. Submit membutuhkan konfirmasi eksplisit kedua.
  • Login ke situs target dilakukan sendiri oleh pengguna di tab lain. MCP harus memakai extension/local browser bridge dan hanya boleh mengakses tab yang disetujui pengguna.
  • Jawaban acak hanya diizinkan untuk field pilihan biasa. Field legal, deklarasi, identitas, keuangan, kesehatan, password, OTP, dan CAPTCHA tidak boleh diacak.
  • Kebijakan konfirmasi submit disimpan per pengguna: Tanyakan dulu atau Tidak perlu konfirmasi. Dialog pertama menyediakan pilihan Ya, untuk seterusnya, dan preferensi dapat diubah kembali dari panel status.
  • Knowledge Packs dan setiap aturannya selalu dibatasi oleh identitas Google pengguna. Pack dapat berlaku global atau hanya pada satu origin HTTPS.

Alur pengguna

  1. Pengguna login ke FormPilot dengan Google SSO.
  2. Pengguna membuka situs tujuan pada tab lain dan login sendiri.
  3. Pengguna menghubungkan tab tersebut melalui browser bridge; bridge tidak mengekspor cookie atau password.
  4. Pengguna memilih file .xlsx, worksheet, dan baris header. Nama header dapat disesuaikan sebelum memilih baris yang diproses; seluruh pembacaan tetap lokal.
  5. MCP merangkum form menjadi label, tipe field, opsi, dan aturan wajib.
  6. FormPilot mencocokkan kolom Excel, lalu menerapkan Knowledge Pack akun tersebut. Hanya field yang masih ambigu yang dikirim ke model.
  7. Semua jawaban—termasuk pilihan acak—ditampilkan pada layar review sebelum draft diisi atau form dikirim.
  8. Setelah aksi berhasil, FormPilot menyimpan riwayat baris per akun dan otomatis memilih baris Excel berikutnya yang belum sukses.

Knowledge Packs per pengguna

Buka /knowledge atau klik Knowledge pada header. Setiap pack berisi:

  • origin situs opsional, misalnya https://portal.example.com;
  • pencocok label/nama field, misalnya Jenis usaha;
  • perilaku: jawaban tetap, tanyakan pengguna, biarkan kosong, atau acak opsi aman.

Urutan planner adalah Excel exact match → Knowledge Pack → model AI → fallback. OTP, CAPTCHA, password, dan field sensitif tetap manual dan tidak dapat dioverride oleh Knowledge Pack. Implementasi awal ini memakai aturan terstruktur di D1 agar deterministik dan hemat token; dokumen bebas/semantic RAG dapat ditambahkan dengan Vectorize ketika volume pengetahuan membutuhkannya.

Riwayat input tidak menyimpan nilai kolom Excel. Worker hanya menerima hash SHA-256 baris, nama file, nama sheet, nomor baris asli, origin target, jenis aksi (draft/submit), dan waktu sukses. Baris bertanda ✓ pada pemilih Excel sudah pernah berhasil untuk file, sheet, dan target tersebut.

Workflow Scenarios

Buka /workflows untuk menjelaskan flow satu kali dengan bahasa biasa. Model mengompilasinya menjadi langkah terbatas (find_row, click, wait_for, fill, pause) dan menyimpannya per akun serta origin situs. Saat dijalankan ulang, scenario bersifat deterministik dan tidak memanggil model lagi. Browser Bridge mencocokkan teks/label yang terlihat, tidak menjalankan selector buatan model, menolak field sensitif, menjaga origin tab, serta berhenti sebelum tombol final seperti Simpan, Kirim, Hapus, atau Bayar.

Menjalankan lokal

npm install
cp .env.example .env.local
npm run dev

Tanpa secret, UI tetap dapat mendemonstrasikan inspeksi dan pemetaan lokal dengan data contoh. Jangan commit .env.local.

Browser Bridge lokal

Extension siap pakai berada di folder extension. Instal sebagai Load unpacked melalui chrome://extensions atau edge://extensions, kemudian pin ke toolbar. Instruksi lengkap tersedia di extension/README.md.

Extension memakai izin activeTab, bukan akses permanen ke semua situs. Pengguna harus mengklik ikon FormPilot pada tab target setelah login. Izin berakhir ketika tab ditutup atau berpindah ke origin lain.

Konfigurasi Cloudflare Worker

1. Google SSO

  1. Di Google Cloud, konfigurasikan OAuth consent screen dan buat OAuth Client bertipe Web application.
  2. Tambahkan origin https://form-pilot.aksarateknologi.com.
  3. Tambahkan redirect URI persis https://form-pilot.aksarateknologi.com/api/auth/google/callback.
  4. Isi GOOGLE_CLIENT_ID; simpan GOOGLE_CLIENT_SECRET dan APP_SIGNING_SECRET sebagai Worker secrets.
  5. Opsional: isi GOOGLE_ALLOWED_DOMAINS dengan domain email yang diizinkan, dipisahkan koma.

FormPilot hanya meminta scope openid email profile. Tidak ada batas 50 pengguna dari Cloudflare Access karena Access tidak dipakai untuk login aplikasi.

2. Model OpenAI-compatible

Set konfigurasi non-rahasia OPENAI_BASE_URL dan OPENAI_MODEL. Simpan key sebagai secret:

npx wrangler secret put OPENAI_API_KEY

Endpoint harus menyediakan POST /chat/completions dan mendukung respons JSON object. FormPilot mengirim nama field dan nama key saja—bukan nilai data—ketika memerlukan bantuan model.

3. MCP browser runner

Simpan endpoint dan nama tool sebagai konfigurasi, kemudian simpan token sebagai secret:

npx wrangler secret put MCP_AUTH_TOKEN
npx wrangler secret put APP_SIGNING_SECRET

APP_SIGNING_SECRET sebaiknya berupa random 32 byte atau lebih. Contoh pembuatan lokal:

openssl rand -base64 32

Kontrak MCP minimal

Server MCP menggunakan Streamable HTTP dan menerima JSON-RPC tools/call.

inspect_form menerima:

{
  "targetUrl": "https://portal.example.com/form",
  "includeHidden": false,
  "redactSensitive": true
}

Hasil terstruktur:

{
  "fields": [
    { "id": "email", "name": "work_email", "label": "Email kantor", "type": "email", "required": true }
  ]
}

fill_form menerima targetUrl, actor, mappings, submit, dan stopOnUnexpectedNavigation. inspect_form juga menerima actor; gunakan nilai identitas ini hanya sebagai namespace sesi browser. Runner harus:

  • memakai profil browser terisolasi per pengguna/run;
  • hanya mengendalikan tab yang telah disetujui melalui extension/local bridge;
  • menyimpan cookie/login hanya di vault atau session browser runner, tidak dalam hasil MCP;
  • menolak domain di luar allowlist;
  • tidak mengisi field sensitif;
  • menghentikan eksekusi saat DOM berubah secara tidak terduga;
  • mengembalikan ringkasan aksi yang sudah dilakukan tanpa kredensial atau isi field sensitif.

Mengapa hemat token

  1. MCP merangkum DOM menjadi metadata field yang kecil.
  2. Pencocokan nama dilakukan deterministik di Worker terlebih dahulu.
  3. Model hanya menerima field yang belum cocok dan daftar nama key.
  4. Nilai data tetap di Worker dan digabungkan setelah model mengembalikan nama key.
  5. Knowledge Pack menangani kasus berulang tanpa prompt atau embedding.
  6. Jika semua label cocok dari Excel/Knowledge, tidak ada panggilan model sama sekali.

Validasi

npm run build
npm run lint

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选