
Security News
Ruby's Bundler 4.0.18 Extends Cooldown to bundle lock and bundle cache
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.
@ailang/parse
Advanced tools
JavaScript/TypeScript client and MCP server for the AILANG Parse document parsing API
JavaScript/TypeScript client and MCP server for the AILANG Parse document parsing API. Parse 17 formats, generate 9 — zero dependencies, native fetch.
npm install @ailang/parse
Run as a stdio MCP server that bridges to the hosted AILANG Parse API. Requires Node.js >= 18.
{
"mcpServers": {
"ailang-parse": {
"command": "npx",
"args": ["-y", "@ailang/parse", "mcp"]
}
}
}
Add to claude_desktop_config.json (Claude Desktop), .cursor/mcp.json (Cursor), or .vscode/settings.json (VS Code). Provides 7 tools: parse, convert, formats, estimate, auth, auth-poll, and account.
import { DocParse } from '@ailang/parse'
const client = new DocParse({ apiKey: 'dp_your_key_here' });
// Parse a document
const result = await client.parse('report.docx');
console.log(`${result.blocks.length} blocks, format: ${result.format}`);
for (const block of result.blocks) {
switch (block.type) {
case 'heading':
console.log(` H${block.level}: ${block.text}`);
break;
case 'table':
console.log(` Table: ${block.headers?.length} cols, ${block.rows?.length} rows`);
break;
case 'change':
console.log(` ${block.changeType} by ${block.author}: ${block.text}`);
break;
default:
console.log(` ${block.type}: ${block.text?.slice(0, 80)}`);
}
}
// Parse with different output formats
const blocks = await client.parse('report.docx'); // Block ADT (default)
const markdown = await client.parse('report.docx', 'markdown'); // Markdown
const html = await client.parse('report.docx', 'html'); // HTML
const mdMeta = await client.parse('report.docx', 'markdown+metadata'); // Markdown with sections
// Upload a local file (multipart)
const result = await client.parseFile('local/report.docx');
// Parse from a signed URL (GCS, S3, Azure Blob — no local file needed)
const result = await client.parseUrl(
'https://storage.googleapis.com/bucket/doc.docx?X-Goog-Signature=...',
'markdown+metadata',
);
// Access structured data
console.log(result.status); // "success"
console.log(result.blocks); // Block[]
console.log(result.metadata.title); // Document title
console.log(result.summary.tables); // Number of tables
// markdown+metadata format includes sections
console.log(result.markdown);
for (const s of result.sections) {
console.log(` ${s.heading}: ${s.markdown.slice(0, 60)}...`);
}
Every parse result includes quota and request metadata from response headers:
const result = await client.parse('report.docx');
const meta = result.responseMeta;
console.log(meta.requestId); // "req_abc123"
console.log(meta.tier); // "free", "pro", or "business"
console.log(meta.quotaRemainingDay); // Requests left today
console.log(meta.quotaRemainingMonth); // Requests left this month
console.log(meta.quotaRemainingAi); // AI requests remaining
console.log(meta.format); // Detected input format ("docx", etc.)
console.log(meta.replayable); // Whether this request can be replayed
All 9 block types are fully typed:
import type { Block, Cell, ParseResult } from '@ailang/parse'
// Type narrowing via block.type
for (const block of result.blocks) {
if (block.type === 'section') {
console.log(`Section: ${block.kind}`); // "slide", "header", etc.
for (const child of block.blocks ?? []) {
console.log(` ${child.type}: ${child.text}`);
}
}
}
API key resolution (checked in order):
apiKey in constructor optionsDOCPARSE_API_KEY environment variable (Node.js)~/.config/ailang-parse/credentials.jsonUse the device auth flow to get an API key. The user signs in once — the key is saved automatically and reused in future sessions.
import { DocParse } from '@ailang/parse';
// First time: deviceAuth() opens browser, user signs in, key saved to disk
const client = new DocParse();
await client.deviceAuth({ label: 'my-agent' });
// Future sessions: key auto-loaded from ~/.config/ailang-parse/credentials.json
const client = new DocParse();
const result = await client.parse('report.docx');
// Usage / Rotate / Revoke
const usage = await client.keys.usage('keyId123', 'user123');
const newKey = await client.keys.rotate('keyId123', 'user123');
await client.keys.revoke('keyId123', 'user123');
// Before
import { UnstructuredClient } from 'unstructured-client';
const client = new UnstructuredClient({ serverUrl: 'https://api.unstructured.io' });
// After — one import change
import { UnstructuredClient } from '@ailang/parse'
const client = new UnstructuredClient({
serverUrl: 'https://api.parse.sunholo.com'
});
// All existing code works unchanged
const elements = await client.general.partition({ file: 'report.docx' });
import { DocParse, DocParseError, AuthError, QuotaError } from '@ailang/parse'
try {
const result = await client.parse('file.docx');
} catch (e) {
if (e instanceof AuthError) console.log('Bad API key');
else if (e instanceof QuotaError) console.log('Quota exceeded');
else if (e instanceof DocParseError) {
console.log(`API error: ${e.statusCode}`);
console.log(` suggested fix: ${e.suggestedFix}`);
console.log(` details: ${JSON.stringify(e.details)}`); // Structured error details
console.log(` request ID: ${e.requestId}`); // For support/debugging
}
}
const client = new DocParse({
apiKey: 'dp_your_key',
baseUrl: 'https://your-deployment.run.app', // Custom endpoint
timeout: 120000, // Request timeout (ms)
});
Works in browsers with native fetch:
<script type="module">
import { DocParse } from './node_modules/@ailang/parse/src/index.js';
const client = new DocParse({ apiKey: 'dp_your_key' });
const health = await client.health();
console.log(health.status); // "healthy"
</script>
Apache 2.0 — see LICENSE for details.
FAQs
JavaScript/TypeScript client and MCP server for the AILANG Parse document parsing API
The npm package @ailang/parse receives a total of 31 weekly downloads. As such, @ailang/parse popularity was classified as not popular.
We found that @ailang/parse demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.