# Let's combine AWS DevOps Agent and Jinbaflow to generate PDF reports.

> Source: <https://dev.to/aws-builders/lets-combine-aws-devops-agent-and-jinbaflow-to-generate-pdf-reports-5c0d>
> Published: 2026-08-03 16:14:24+00:00

Here's the English translation of your blog post:

I had never properly tried the MCP integration feature of AWS DevOps Agent, so I decided to test whether it could integrate via MCP with Jinbaflow — an AI workflow tool I've been personally experimenting with recently. The implementation itself should be fairly quick, so I hope you'll enjoy this as a short, bite-sized piece.

Among the report outputs from AWS DevOps Agent, I wanted to process them in a way that's suitable for explaining to the business layer — making them easier to understand and supporting PDF output. I thought Jinba could help achieve this nicely, so I gave it a try.

First, you need to create a workflow in Jinbaflow, but since the workflow creation itself isn't the main topic, I'll share the pre-defined YAML. You should be able to create the workflow without any issues by pasting the following YAML into the code.

```
- id: incident_report
  tool: INPUT_TEXT
  input:
    - name: value
      value: ""
    - name: description
      value: |-
        AWS DevOps Agent(またはAWSの障害調査エージェント)から受け取った障害調査結果の原文を入力してください。
        ログ、エラーメッセージ、根本原因分析(RCA)、影響範囲など、技術的な内容をそのまま貼り付けてください。
    - name: optional
      value: false
- id: incident_title
  tool: INPUT_TEXT
  input:
    - name: value
      value: ""
    - name: description
      value: 障害の名称やインシデントID、チケット番号など(任意)。分かれば入力してください。
    - name: optional
      value: true
- id: translate_business
  tool: ANTHROPIC_INVOKE
  config:
    - name: version
      value: claude-sonnet-5
    - name: temperature
      value: 0.2
  input:
    - name: prompt
      value: |-
        あなたはAWSの技術的な障害調査結果を、ITに詳しくない経営層・事業責任者(ビジネス層)向けに翻訳する専門家です。

        以下は、AWS DevOps Agentが実施した障害調査の結果(技術的な原文)です。

        ==インシデント名(任意)==
        {{steps.incident_title.result}}

        ==障害調査結果(原文)==
        {{steps.incident_report.result}}

        ==指示==
        - 上記の内容を、専門用語(AWSサービス名の略称、エラーコード、ネットワーク/インフラ用語など)を極力使わずに、ビジネス層が読んですぐ理解できる平易な日本語に変換してください。
        - 「なぜ起きたか」「何に影響したか」「今どう対応しているか」「今後どうするか」を、事実に基づき正確に、省略や誇張なく伝えてください。技術的な詳細を落としすぎて不正確にならないよう注意してください。
        - どうしても技術用語を使う必要がある場合は、平易な言葉で必ず補足説明を添えてください(例:「Auroraデータベース(顧客データを保存している基盤システム)」)。
        - 原文に無い情報を推測で付け足さないでください。原文に記載がない項目は「調査結果に記載なし」等、正直に書いてください。
        - 技術担当者が原文を突き合わせて確認できるよう、technical_appendixには原文の技術的なキーワード(サービス名・エラーコード・ログの要点等)を簡潔に残してください。
        - 出力は指定されたJSON形式のみとし、余計な前置きや説明文は含めないでください。
    - name: json_schema
      value: |-
        {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "障害の名称(平易な言葉で。原文タイトルがあれば活用)"
            },
            "summary": {
              "type": "string",
              "description": "何が起きたかの要約。専門用語なしで3〜5行程度"
            },
            "impact": {
              "type": "string",
              "description": "ビジネス・利用者・サービスへの影響。誰が/何がどう困ったか"
            },
            "cause": {
              "type": "string",
              "description": "原因を平易な言葉で説明したもの"
            },
            "status": {
              "type": "string",
              "description": "現在の対応状況(復旧済み/対応中など)"
            },
            "next_actions": {
              "type": "array",
              "items": { "type": "string" },
              "description": "今後の対応・再発防止策のリスト"
            },
            "confidence_note": {
              "type": "string",
              "description": "原文に記載がなく判断できない項目がある場合の注記。なければ空文字"
            },
            "technical_appendix": {
              "type": "string",
              "description": "技術担当者向けの補足。原文の技術用語・サービス名・エラーコード等を簡潔に整理したもの"
            }
          },
          "required": ["title", "summary", "impact", "cause", "status", "next_actions", "technical_appendix"],
          "additionalProperties": false
        }
  needs:
    - incident_report
    - incident_title
- id: format_report
  tool: PYTHON_SANDBOX_RUN
  input:
    - name: code
      value: |-
        c = steps.translate_business.result.content

        title = c.get("title") or "障害報告"
        summary = c.get("summary") or "記載なし"
        impact = c.get("impact") or "記載なし"
        cause = c.get("cause") or "記載なし"
        status = c.get("status") or "記載なし"
        actions = c.get("next_actions") or []
        confidence_note = c.get("confidence_note") or ""
        appendix = c.get("technical_appendix") or ""

        lines = []
        lines.append(f"■ {title}")
        lines.append("")
        lines.append("【概要】")
        lines.append(summary)
        lines.append("")
        lines.append("【ビジネスへの影響】")
        lines.append(impact)
        lines.append("")
        lines.append("【原因(わかりやすく)】")
        lines.append(cause)
        lines.append("")
        lines.append("【現在の対応状況】")
        lines.append(status)
        lines.append("")
        lines.append("【今後の対応】")
        if actions:
            for a in actions:
                lines.append(f"- {a}")
        else:
            lines.append("- 記載なし")

        if confidence_note:
            lines.append("")
            lines.append("【補足(不明点)】")
            lines.append(confidence_note)

        if appendix:
            lines.append("")
            lines.append("---")
            lines.append("【技術担当者向け補足(原文キーワード)】")
            lines.append(appendix)

        "\n".join(lines)
    - name: data_type
      value: STRING
  needs:
    - translate_business
- id: business_report
  tool: OUTPUT_TEXT
  input:
    - name: value
      value: "{{steps.format_report.result.data}}"
  needs:
    - format_report
- id: business_report_json
  tool: OUTPUT_JSON_WITH_VALIDATION
  config:
    - name: schema
      value: |-
        {
          "type": "object",
          "properties": {
            "title": { "type": "string" },
            "summary": { "type": "string" },
            "impact": { "type": "string" },
            "cause": { "type": "string" },
            "status": { "type": "string" },
            "next_actions": { "type": "array", "items": { "type": "string" } },
            "confidence_note": { "type": "string" },
            "technical_appendix": { "type": "string" }
          },
          "required": ["title", "summary", "impact", "cause", "status", "next_actions", "technical_appendix"]
        }
  input:
    - name: value
      value: "{{ steps.translate_business.result.content | dump }}"
  needs:
    - translate_business
```

Also, due to Jinba's specification, you cannot use a workflow as an MCP server unless you publish it, so you need to perform the publish step. The procedure is simple — just click the "Publish" button at the top of the screen.

For the AWS DevOps Agent configuration, you simply need to register the MCP server. Specifically, here's what you need to do:

`https://api.jinba.io/api/v2/workspaces/<workflow-ID>/mcp`

`Authorization`

for the API key header`Bearer <token>`

for the API key valueAfter that, just follow the flow and click the "Next" button to start using Jinbaflow as an MCP server.

When I instructed AWS DevOps Agent to format a report via the Jinbaflow MCP server, I could confirm it was going through MCP.

On the Jinbaflow side, I could also confirm that the report output via AWS DevOps Agent was being generated.

The verification itself wasn't particularly difficult. (I expected to struggle a bit more, but the implementation went smoothly.)

Personally, I think you could use Jinba as a hook for setting up Slack/email notifications, so I believe Jinba could be useful for needs like **"It's not available in AWS DevOps Agent's built-in integrations, but I want to connect it easily."** This was a small-scale verification, but I'd like to continue experimenting further.

---I've translated the full blog post into English. A few notes on my translation choices:

Let me know if you'd like me to also translate the Japanese strings inside the YAML code block, or if you'd like any adjustments to the tone or wording!
